Dynamics crm 更新Quote.TotalAmount时激发的工作流将获取无限循环错误

Dynamics crm 更新Quote.TotalAmount时激发的工作流将获取无限循环错误,dynamics-crm,dynamics-crm-2015,Dynamics Crm,Dynamics Crm 2015,我有一个工作流,在更新报价总额时更新报价实体上的自定义字段。执行工作流时,会出现以下错误 此工作流作业已取消,因为启动它的工作流包含无限循环。请更正工作流逻辑,然后重试。有关工作流逻辑的信息,请参阅“帮助” 要重现此错误,请创建具有更新步骤的按需工作流。更新步骤将报价押金设置为100。执行工作流,然后导航到工作流的“流程会话”区域。您将看到工作流程已执行多次。如果打开流程会话记录,您将看到上面提到的错误 我假设发生这种情况是因为当报价被更新时,总金额被重新计算;当总金额被重新计算时,然后执行工作

我有一个工作流,在更新报价总额时更新报价实体上的自定义字段。执行工作流时,会出现以下错误

此工作流作业已取消,因为启动它的工作流包含无限循环。请更正工作流逻辑,然后重试。有关工作流逻辑的信息,请参阅“帮助”

要重现此错误,请创建具有更新步骤的按需工作流。更新步骤将报价押金设置为100。执行工作流,然后导航到工作流的“流程会话”区域。您将看到工作流程已执行多次。如果打开流程会话记录,您将看到上面提到的错误

我假设发生这种情况是因为当报价被更新时,总金额被重新计算;当总金额被重新计算时,然后执行工作流;当工作流被执行时,报价被更新;当报价被更新时,总金额被更新,依此类推

比如说

  • 报价是最新的

  • 重新计算总金额

  • 触发工作流程并更新报价押金
  • 重新计算总金额
  • 触发工作流程并更新报价押金
  • 重新计算总金额
  • 触发工作流程并更新报价押金
  • 重新计算总金额
  • 触发工作流程并更新报价押金
  • 发生错误
  • 我希望这是有道理的

    是否有人知道或有任何想法如何解决此问题?

    查找未使用的字段(如果没有,则创建自定义字段),并将其用作标志

    将其设置为工作流中的某个值,在对报价记录执行任何更新之前,请检查此字段的值以确定工作流是否已更新该记录


    如果工作流已经运行过一次,请停止工作流而不对报价记录进行任何更新,这样可以防止无限循环。

    在插件的开头:

    if (Context.Depth > 1) 
    {
        return; 
    }
    
    如果被另一个插件触发,它将退出该插件,因此在第二次触发时退出循环。这是我在更新时注册插件时使用的,这样它就不会重新启动


    希望能有所帮助。

    如果报价单没有实际进行任何更改,请更改您的工作流程代码,使其不更新报价单。我假设总量被反复设置为相同的值,这就是为什么会得到一个无限循环,因为这又是工作流的触发器

    如果不需要更新报价单而不更新报价单,则显然不会触发另一个工作流


    请参阅,了解如何检查工作流活动代码中记录的先前值。

    如果不更新总额,则更新自定义字段。您确定工作流不会在自定义字段更改时触发吗?

    +1,但这将阻止所有其他插件触发此插件,这可能是一项要求。我个人认为不应该依赖于
    深度
    控制,如果还有其他选择,它应该是最后的手段。我同意,这是我想问的问题,因为他没有依赖它。但在他的使用案例中,它似乎没有。