更新Quote.TotalAmount时触发的工作流会出现无限循环错误

时间:2015-08-14 04:49:51

标签: dynamics-crm dynamics-crm-2015

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

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

要重现此错误,请创建具有更新步骤的随需应变工作流程。更新步骤将报价存款设置为100.执行工作流程,然后导航到工作流程的“处理会话”区域。您将看到工作流程已多次执行。如果您打开过程会话记录,您将看到上述错误。

我认为这是因为当报价更新时,重新计算总金额,重新计算总金额然后执行工作流程,执行工作流程时报价更新,报价更新时总计金额是更新等等等和儿子。

例如

  1. 报价是更新

  2. 重新计算总金额

  3. 触发工作流程并更新报价存款。
  4. 重新计算总金额
  5. 触发工作流程并更新报价存款。
  6. 重新计算总金额
  7. 触发工作流程并更新报价存款。
  8. 重新计算总金额
  9. 触发工作流程并更新报价存款。
  10. 发生错误
  11. 我希望这是有道理的

    有没有人知道或有任何关于如何解决这个问题的想法?

4 个答案:

答案 0 :(得分:2)

在插件的开头:

if (Context.Depth > 1) 
{
    return; 
}

如果由另一个插件触发,它将退出插件,因此退出第二个触发器的循环。这是我在更新时注册插件时使用的内容,因此它不会重新开始。

希望它有所帮助。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

如果实际上没有进行任何更改,请将您的工作流程代码更改为不更新Quote。我假设Total Amount一遍又一遍地设置为同一个东西,这就是为什么你会得到一个无限循环,因为这会再次触发工作流。

如果您不需要更新报价,那么您显然不会触发另一个工作流程。

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

答案 3 :(得分:0)

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