CRM JavaScripts tips: field 的 submit mode(提交模式)

    之前工作中遇到一個問題,客戶有個要求lock一個field當這個field的值不是空的時候,我的同事決定用business rule去實現這個功能。


     在這個field的值成功的被integration process填充的時候,這個問題看起來解決了。 但是,當這個值需要手動輸入的時候,我們發現了問題,當你輸入了值之後,這個field就被business rule給disabled了。 但是,當你試圖去保存你的改變時,你會發現這個值會自動消失,無論如何都無法保存。


     這就要歸咎於我們今天要討論的問題, submit mode.

      MS CRM的field有三個提交模式

1. always


2. never


3. Dirty


   爲了增強CRM form的效率,當你click save或者auto save的時候,並不是所有的field都從前端傳向server端,這個功能正是通過submit mode實現的。

always意味着這個field只要保存發生就會傳給server

never則是從不傳給server

Dirty是默認的submit mode, 也就是隻有這個field的值改變的時候纔會傳給server.


舉一些例子方便大家理解這三種模式

always的field: 你server端的功能如plugin或者workflow一直需要這個值去實現某種邏輯

never: createdon這個field就是默認never, 還有disabled的field,這也是之前問題的原因。


JavaScript允許你通過

Xrm.Page.getAttribute(arg).getSubmitMode()
Xrm.Page.getAttribute(arg).setSubmitMode()
去獲得和修改field的submit mode。 這也給了我們很多便利,比如有一個field你只需要它來實現你前端的邏輯,你就可以通過

Xrm.Page.getAttribute(arg).setSubmitMode("never")
來保證它的值永遠不會傳給server


以上就是關於submit mode的簡述, 於是之前的功能只能從business rule給改成JS了。 但是後來上網查了查加上自己做了一些實驗,可以通過一個duplicate field加上Business rule和workflow來實現

1.創建field1和field2

2. 創建business rule, 當field1有值時,disabled field1, 隱藏field2

3.  創建business rule 當field1值爲空時, 隱藏field1, 顯示field2,用戶可在在field2上輸入值

3. 創建realtime workflow 當field2的值update時觸發,若field1的值爲空且field2的值不爲空, 把field2的值設爲field1的值。

這樣通過out of box的function實現了繞開disabled field的logic來實現js通過改變submit mode才能實現的功能。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章