2016-08-18 141 views
0

我有一个方法,允许我从OptionSetValue字段中筛选出某些选项。在业务流程流程OptionSetValue上的过滤选项步骤

它在表单字段上工作正常,但是当该字段位于标题中时,对于业务流程流,它“起作用”,通过调试,我看到清除并重新添加的选项(仅限于那些这应该有),但一旦形式呈现,所有的选项都可见...

这里的方法:

FilterOptionSetValues: function (fieldName, visibleOptions) { 

      var ctrl = Xrm.Page.getControl(fieldName); 
      var allOptions = ctrl.getOptions(); 

      //clear current options 
      ctrl.clearOptions(); 

      //loop through all options of optionset and if one is found in config element, add it. 
      for (var x = 0; x <= allOptions.length - 1; x++) { 
       if (visibleOptions.availableOptions.indexOf(parseInt(allOptions[x].value)) > -1) { 
        ctrl.addOption(allOptions[x]); 
       } 
      } 
} 

这里就是我把它叫做:

FilterOptionSetValues('header_process_new_my_optionset_field', { stage: 1, availableOptions: [300000002, 300000003, 300000004] }); 

该代码在表单加载事件和另一个字段(salesstage)的OnChange事件中调用。

有什么我失踪了吗?好像MS自己的JavaScript是解开我在这里的工作...

编辑:当我把一个OnChange监听器header_process_new_my_optionset_field,当我改变在头业务流程该字段的值没有任何反应,而是一种onChange监听器new_my_optionset_field将由表单或标题业务流程流上该字段的更改触发。

但是,仅在字段new_my_optionset_field上运行上述逻辑,不会为业务流程中的相同字段执行过滤。

+0

您是否为该属性注册了OnChange处理程序,并重新添加选项? clearOptions()调用onChange事件处理程序。 – dynamicallyCRM

+0

@dynamicallyCRM我编辑了我的问题并指定代码被调用的位置。 –

+0

尝试在超时函数中包装调用并在5秒左右后运行它以排除CRM脚本在表单加载后异步更新它的情况? – dynamicallyCRM

回答

0

通过执行所有窗体控件的名称(Xrm.Page.ui.getControls().getAll())的console.log,我发现在该过程的每个阶段都有该属性的控件实例,接着是1,2,3等等。业务流程的所有阶段都有相同的字段。

所以我改变了上面的代码为:

var control = Xrm.Page.getControl(fieldName); 
var allOptions = control.getAttribute().getOptions(); 

//clear current options 
control.clearOptions(); 

//below, same as above... 

并把它称为对所有这样:

FilterOptionSetValues('header_process_new_my_optionset_field', { stage: 1, availableOptions: [300000002, 300000003, 300000004] }); 
FilterOptionSetValues('header_process_new_my_optionset_field1', { stage: 1, availableOptions: [300000002, 300000003, 300000004] }); 
FilterOptionSetValues('header_process_new_my_optionset_field2', { stage: 1, availableOptions: [300000002, 300000003, 300000004] }); 
//and so on... 

它是在第一个工作日,但只能过滤在第一阶段的选项流量,这是不活跃的阶段,当测试,所以它给人的印象是不工作...

0

每次你改变当前的BPF阶段(未选中,但实际上去t他下一个阶段)它迫使CRM保存。这可能会刷新您的选项集。添加一个Xrm.Page.data.process.addOnStageChange事件处理程序,然后在其中运行你的过滤器。