如何使用JavaScript为Dynamics 365 CRM隐藏Option Set选项值?
Dynamics 365 CRM 选项集隐藏代码问题修正
现有代码存在的问题
- 废弃API使用错误
Dynamics 365 9.x及以上版本已经移除了formContext.Page对象,直接通过formContext.getControl("字段名")即可获取控件实例,原代码中的formContext.Page.getControl写法已经失效。 removeOption参数类型错误
该方法要求传入的是选项集对应项的整数值,不是选项的显示文本,你需要先到选项集的定义页,找到Test1~Test4对应的数字值(比如Test1对应1、Test2对应2这类),再传入对应整数参数才能生效。- 未覆盖业务流程流(BPF)中的同名字段
表单上的选项集控件和BPF中使用的同名字段控件是两个独立实例,如果需要BPF里的对应选项也隐藏,需要额外获取BPF的控件,控件名规则为header_process_+ 字段名,本场景下就是header_process_statuscode。
修正后可运行代码
function hideOptions(executionContext) { var formContext = executionContext.getFormContext(); // 仅在创建(1)和更新(2)表单类型下执行 if (formContext.ui.getFormType() === 1 || formContext.ui.getFormType() === 2 ) { // 获取表单上的选项集控件 var formPicklist = formContext.getControl("statuscode"); // 替换为你自己选项集对应Test1~Test4的实际整数值,以下为示例值 var needHideValues = [1,2,3,4]; needHideValues.forEach(function(val){ formPicklist.removeOption(val); }) // 额外处理业务流程流中的同名字段控件 var bpfPicklist = formContext.getControl("header_process_statuscode"); if(bpfPicklist){ // 避免BPF未加载时报错 needHideValues.forEach(function(val){ bpfPicklist.removeOption(val); }) } } }
配置注意事项
- 执行前务必替换
needHideValues数组的值为你选项集里Test1~Test4对应的实际整数值,可到解决方案中对应statuscode字段的定义页查看每个选项的数值 - 该函数需要绑定到表单的
onLoad事件,同时要勾选「将执行上下文作为第一个参数传递」的选项 - 该方案仅前端隐藏选项,不会删除选项集的全局配置,也不影响BPF的原有逻辑,符合你的需求
内容的提问来源于stack exchange,提问作者The G
相关产品推荐
相关产品推荐

