Dynamics 365中基于其他字段值隐藏multiselect option set字段的方法
可以通过JavaScript实现该需求。setVisible方法本身是支持多选选项集(multiselect option set)类型字段的,绝大多数操作失效的原因是控件获取方式错误、事件绑定逻辑遗漏。
实现前提
- 你使用的Dynamics 365版本为v9.0及以上,该版本才原生支持多选选项集的客户端API操作
- 代码需要同时绑定到表单的OnLoad事件,以及用来控制显隐的参考字段的OnChange事件,保证表单加载、参考字段值变动时都会触发显隐逻辑
核心实现代码
首先编写JS逻辑,注意替换代码中的字段逻辑名称为你实际使用的字段名:
function toggleMultiselectVisibility(executionContext) { // 获取表单上下文 const formContext = executionContext.getFormContext(); // 替换为控制显隐的参考字段的逻辑名称 const referenceAttr = formContext.getAttribute("new_reference_field"); // 替换为多选选项集字段的逻辑名称 const multiselectControl = formContext.getControl("new_multiselect_optionset"); if (referenceAttr && multiselectControl) { // 示例判断逻辑:参考字段值等于2时隐藏多选选项集,其余情况显示,可按需调整 const referenceValue = referenceAttr.getValue(); const shouldShow = referenceValue !== 2; multiselectControl.setVisible(shouldShow); } }
代码注意事项
- 绑定事件时必须勾选「将执行上下文作为第一个参数」选项,否则
executionContext会为空 setVisible是控件对象的方法,需要调用getControl获取对象后调用,getAttribute返回的是属性对象,没有该方法,这是最常见的操作失效原因- 如果同一多选选项集在表单上放置了多个实例,需要遍历所有控件单独设置可见性:
formContext.getControl("new_multiselect_optionset").forEach(control => { control.setVisible(shouldShow); });
异常场景排查
如果按上述操作后依然不生效,可以逐一检查以下问题:
- 多选选项集的字段级安全权限是否限制了当前用户的可见性,权限优先级高于客户端JS控制
- 多选选项集所属的表单节、选项卡是否被设置为隐藏,父容器隐藏时单独设置字段可见性不会生效
- 打开浏览器控制台查看是否有JS报错,排查字段逻辑名称拼写错误、同名冲突等问题
内容的提问来源于stack exchange,提问作者Parinaz.N
相关产品推荐
相关产品推荐

