You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dynamics 365表单中按状态动态过滤Option Set选项的JS问题

解决Dynamics 365 Option Set动态控制可用选项失效问题

你的代码核心问题是直接修改了字段属性(Attribute)的选项对象,而非表单控件(Control)的UI选项。Dynamics 365中,Attribute负责字段的数据定义,而Control才是控制前端显示的载体,修改Attribute的选项不会同步到UI。

修改后的代码

function setStatusoptions(executionContext) {
    var formContext = executionContext.getFormContext();
    // 获取字段控件(而非仅属性)
    var statusControl = formContext.getControl("new_status");
    var statusField = formContext.getAttribute("new_status");
    
    var currentStatus = statusField.getValue();
    var allowedOptionValues = [];
    console.log("currentstat=" + currentStatus);

    if (currentStatus === 717800000) {
        allowedOptionValues = [717800001, 717800002];
    } else if (currentStatus === 717800001) {
        allowedOptionValues = [717800002, 717800003];
    } 
    console.log(allowedOptionValues);
    
    // 先清除所有选项的禁用状态,避免残留
    statusControl.clearDisabledOptions();
    
    // 遍历所有选项,通过控件方法设置禁用
    var options = statusField.getOptions();
    for (var i = 0; i < options.length; i++) {
        var option = options[i];
        // 不在允许列表中的选项禁用
        var isDisabled = allowedOptionValues.indexOf(option.value) === -1;
        statusControl.setDisabledOption(option.value, isDisabled);
    }
}

关键修改点

  • 替换仅操作formContext.getAttribute("new_status")的逻辑,改用formContext.getControl("new_status")获取控件实例
  • 使用控件的clearDisabledOptions()方法重置之前的禁用状态,避免多次触发后状态混乱
  • 通过控件的setDisabledOption(optionValue, isDisabled)方法控制UI层面的选项禁用,这是Dynamics 365官方支持的API

额外注意事项

  1. 确保该函数不仅绑定到表单加载事件,还要绑定到new_status字段的OnChange事件,这样状态变化时能实时更新可用选项
  2. 确认new_status字段在表单中是可编辑状态,如果字段本身被禁用,控制选项的操作也不会生效

内容的提问来源于stack exchange,提问作者Cool Tuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:00:22