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

Dynamics 365 JS调用业务流程流moveNext时脏表单双保存如何规避

问题背景
  • 使用JavaScript调用formContext.data.process.moveNext(callbackFunction)实现业务流程流阶段前进时,若当前表单为存在未保存修改的脏表单,方法执行前需要先完成表单保存。
  • 常规实现思路是先手动触发表单保存,再调用moveNext方法,但moveNext本身会触发第二次表单保存,导致整体流程响应缓慢。
  • 点击界面原生「下一阶段」按钮时,系统仅触发一次保存即可同步完成保存与阶段跳转,执行效率更高。
待解决问题
  • 如何通过JavaScript实现脏表单场景下调用moveNext时避免双保存问题?
  • 是否可以直接调用原生「下一阶段」按钮绑定的内置函数实现同等效果?
解决方案

脏表单下调用moveNext避免双保存的实现方法

核心逻辑是去掉手动提前触发的表单保存操作,直接复用moveNext方法内置的保存逻辑,只需要补充回调错误处理即可,不会触发重复保存,实现代码如下:

function moveToNextStage(formContext) {
    const moveNextCallback = (result) => {
        if (result.status !== "success") return;
        // 跳转成功后激活目标阶段,和原生逻辑保持一致
        formContext.data.process.setActiveStage(result.stage, () => {});
    };
    // 方法本身自带脏检测,无修改时直接跳转无额外开销,有修改时自动触发单次保存
    formContext.data.process.moveNext(moveNextCallback);
}

moveNext方法的原生执行逻辑本身就包含脏表单检测:检测到未保存修改时会自动触发单次表单保存,保存成功后才执行阶段跳转,和手动点击原生按钮的执行链路完全一致,不会产生第二次保存请求。如果业务中存在自定义onSave校验逻辑,不要在保存事件中无差别调用preventDefault,避免打断内置保存流程。

直接调用原生「下一阶段」按钮内置函数的可行性

不推荐使用这种方案:

  • 业务流程流原生按钮的绑定函数属于平台未公开的内部实现,不同产品版本、月度更新中都可能调整函数名、执行逻辑,直接调用内部函数的代码兼容性极差,版本迭代后极易出现无征兆的功能失效,平台官方也不会为这类未公开API的使用提供支持。
  • 上述优化后的moveNext调用方案已经和原生按钮的执行逻辑、性能表现完全一致,仅触发一次保存即可完成全流程操作,完全可以满足效率要求,不需要冒险调用内部未公开方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:24:14