在Business Process流程OptionSetValue步骤上过滤选项

时间:2016-08-18 20:40:55

标签: javascript dynamics-crm-2011 dynamics-crm-2016 xrm

我有一个允许我从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] });

此代码在表单load事件和其他字段的OnChange事件(salesstage)中调用。

有什么我想念的吗?好像MS自己的javascript正在撤消我的工作......

编辑:当我在OnChange上放置一个header_process_new_my_optionset_field侦听器时,当我在标头业务流程流中更改该字段的值时,没有任何反应,但onChange监听器在{new_my_optionset_field上1}}将由表单或标题业务流程上的该字段的更改触发。

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

2 个答案:

答案 0 :(得分:0)

通过执行所有表单控件(console.log)的Xrm.Page.ui.getControls().getAll()名称,我发现在该过程的每个阶段都有该属性的控件实例,其次是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...

它起初工作,但只是在流程的第一阶段过滤选项,这在测试时不是活动阶段,因此给人的印象是不工作......

答案 1 :(得分:0)

每当您更改当前的BPF阶段(未选择,但实际上进入下一阶段)时,它会强制进行CRM保存。这可能会刷新您的选项集。添加一个Xrm.Page.data.process.addOnStageChange事件处理程序,然后在其中运行过滤器。