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

Dynamics 365字段变更时自动保存表单的脚本报错问题排查

Dynamics 365自动保存脚本错误排查

脚本存在的核心问题

  • 缺失字段存在性校验:代码直接调用formContext.getAttribute("logdate"),如果字段名拼写错误、该字段未添加到当前表单,会触发null引用错误,直接导致脚本崩溃。
  • 无限循环风险:调用formContext.data.save()会触发表单保存事件,若该脚本绑定的是字段OnChange或表单OnSave事件,保存操作会再次触发脚本执行,形成无限循环,最终引发系统报错。
  • SaveMode参数使用不当:saveMode:70对应系统自动保存模式,手动调用该模式易与系统默认自动保存逻辑冲突,可能导致异常。

修复后的脚本

function autosaveWhenFieldIsDirty(formContext) {
    // 先校验字段是否存在
    var logDateField = formContext.getAttribute("logdate");
    if (!logDateField) {
        console.error("字段logdate不存在或未添加到当前表单");
        return;
    }

    var isFieldDirty = logDateField.getIsDirty();
    // 过滤保存操作触发的重复执行,避免无限循环
    var saveEventArgs = formContext.data.entity.getSaveEventArgs();
    if (saveEventArgs && saveEventArgs.getSaveMode() === 70) {
        return;
    }

    var saveOptions = {
        saveMode: 2 // 使用快速保存模式,更适合手动触发场景
    };

    if (isFieldDirty) {
        formContext.data.save(saveOptions).then(
            function (success) {
                console.log("保存成功:", success);
            },
            function (error) {
                console.error("保存失败:", error);
            }
        );
    }
}

修复说明

  1. 新增字段存在性检查,提前拦截null引用错误
  2. 增加保存事件判断,过滤系统保存触发的重复执行,彻底避免无限循环
  3. 将SaveMode替换为2(快速保存),更适配手动触发保存的业务场景,减少与系统默认逻辑的冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:31:16