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

来源:互联网 发布:java.awt.color 使用 编辑:程序博客网 时间:2024/06/05 09:03

    之前工作中遇到一个问题,客户有个要求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才能实现的功能。



0 0