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

Dynamics CRM Online表单禁用自动保存后HTML Web资源仍触发保存如何解决

问题根因

Dynamics 365 表单的addOnSave注册的回调执行顺序早于你在表单层面配置的preventDefault逻辑,且preventDefault只会阻止表单最终的提交动作,不会中断已经触发的addOnSave回调链,因此你在HTML Web资源中注册的保存函数依然会执行。

解决方案

直接修改Web资源中addOnSave的绑定逻辑,在执行保存前先判断当前保存场景是否符合要求,过滤自动保存和已被取消的保存事件即可:

// 修改后的HTML Web资源后台代码
async created: function () 
{
    // addOnSave回调会自动传入表单执行上下文
    window.parent.Xrm.Page.data.entity.addOnSave(async (context) => { 
        const eventArgs = context.getEventArgs();
        // 过滤自动保存场景 + 已被其他逻辑阻止的保存场景
        if (eventArgs.getSaveMode() === 70 || eventArgs.isDefaultPrevented()) {
            return;
        }
        await saveData(this);
    });
}
    

saveData : async function()
{
    let results = await window.parent.Xrm.WebApi.online.executeMultiple(modifiedrecords);

    for (let resultsub in results) 
    {
        const result = results[resultsub];
        if (result.ok) {
            // 你的业务逻辑
        }
    }
}

补充说明

  • 注意原saveData方法用到了await,需要加上async修饰符否则会报错
  • 如果你不需要和表单的保存动作绑定,也可以直接在Web资源中增加独立的保存按钮,手动触发saveData逻辑,完全避免和表单保存事件的耦合
  • window.parent.Xrm.Page属于已废弃的旧API,后续版本升级可能会失效,建议逐步替换为官方推荐的Xrm.Utility.getGlobalContext等新API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:15:06