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

Dynamics 365 CRM如何获取双选项集值并通过JS禁用表单字段

解决方案

核心问题原因

Dynamics 365 双选项集(Yes/No)字段取值异常通常由以下几个常见问题导致:

  • 字段逻辑名称拼写错误:Dynamics 365 的字段名区分大小写,需确认opu_paid和实际系统中配置的逻辑名称完全一致,包括前缀、下划线、大小写
  • 未处理空值场景:双选项集字段getValue()的返回值包含三种状态:true(勾选/Yes)、false(未勾选/No)、null(字段未赋值、表单加载未完成),原有代码未处理null的情况会导致判断逻辑失效
  • 执行时机错误:如果代码仅在表单加载时执行一次,没有绑定到opu_paid的onChange事件,勾选状态变化后不会触发后续的禁用逻辑

修正后可运行代码

以下代码同时支持表单加载时自动执行、复选框状态变化时自动触发,还新增了批量禁用所有字段的逻辑,无需逐个指定控件:

// 表单加载事件入口函数,注册时需勾选"传递执行上下文作为第一个参数"
function onFormLoad(executionContext) {
    var formContext = executionContext.getFormContext();
    // 绑定复选框变化事件
    formContext.getAttribute("opu_paid").addOnChange(onPaidStatusChange);
    // 表单加载时先执行一次逻辑
    onPaidStatusChange(executionContext);
}

// 复选框状态变化触发逻辑
function onPaidStatusChange(executionContext) {
    var formContext = executionContext.getFormContext();
    // 获取复选框值,空值按照未勾选处理
    var isPaid = formContext.getAttribute("opu_paid").getValue() ?? false;
    // 兼容低版本浏览器可替换为以下写法:
    // var isPaid = formContext.getAttribute("opu_paid").getValue() === true;

    // 批量遍历所有控件设置禁用状态,不需要逐个指定字段
    formContext.ui.controls.forEach(function(control) {
        // 跳过opu_paid控件本身,避免勾选后无法修改
        if(control.getName() === "opu_paid") return;
        // 仅处理字段类型的控件,跳过子网格、选项卡等非字段控件
        if(control.getControlType() === "standard" || control.getControlType() === "lookup" || control.getControlType() === "optionset") {
            control.setDisabled(!isPaid);
        }
    });
}

部署说明

  • 注册onFormLoad函数到表单的On Load事件,必须勾选「传递执行上下文作为第一个参数」选项
  • 如果不需要保留opu_paid的编辑权限,可以删掉逻辑里跳过该控件的判断行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:09:03