addOnStageChange()被调用两次

时间:2018-09-24 10:26:39

标签: javascript dynamics-crm dynamics-365

我已经在商机实体中的BPF阶段更改了事件处理程序:

var checkForAccountApproved = function (executionContext) {
    var formContext = executionContext.getFormContext();
   formContext.data.process.addOnStageChange(function (stageContext) {

        var stageName = stageContext.getEventArgs().getStage().getName().toString();
        if (some conditions) {
            formContext.data.process.movePrevious();

        }
        else {
            currentActiveStage.setValue(stageName);
            formContext.data.entity.save();
        }

    });
};

基本上,单击“下一步”时,我需要检查是否满足某些条件,然后,只有下一阶段应该处于活动状态,否则,当前阶段应该处于活动状态。

如果不满足条件(即发生阶段更改),我将在字段中存储当前活动阶段的值。如果我显式调用save,则再次触发事件处理程序。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

答案可能较晚,但... 不要使用formContext.data.process.movePrevious()取消阶段更改,因为这会尝试将阶段移回并重新执行阶段更改(这可能会一直循环直到您回到第一个阶段。.而是使用以下内容来取消阶段更改并停留在当前阶段

executionContext.getEventArgs()。preventDefault();