在CRM 4.0中运行的CRM 3.0标注导致无限循环

时间:2010-01-04 17:22:03

标签: .net dynamics-crm dynamics-crm-4 callouts dynamics-crm-3

我重新编译了一个CRM 3.0标注库,并将它们部署到我的CRM 4.0实例中。我的一个PostUpdate标注调用service.Update()。这导致更新方法多次触发。它最终会因超时错误而停止。当这些标注与CRM 3.0一起使用时,不会发生这种情况。

此自定义代码的入口点的方法签名如下所示。

public override void PostUpdate(CalloutUserContext userContext, CalloutEntityContext entityContext, string preImageEntityXml, string postImageEntityXml)

1 个答案:

答案 0 :(得分:1)

IPluginExecutionContext上的一个属性是深度。这表明你的插件正在执行插件'call-stack'的“深度”。当您在CRM表单上按“保存”时,您将从深度为1开始。每次更新后调用更新时,深度都会增加。

你会发现有些人会在执行插件逻辑之前检查深度是否等于1。然而,这不适合所有人。如果工作流程要更新此实体,则深度将为2(工作流程为1,现在您的更新为2)。

当深度达到8时,CRM停止执行,称其为递归。我不确定你是否真的遇到了超时或这个错误。自从我看到他们抛出什么错误以来已经很久了。

我们在整个解决方案中开发了自定义代码,我们必须检查递归。我无法分享所有这些,但如果你喜欢,你可以有这个想法。

另外一些想法是为您的实体添加自定义属性。不要把它放在表格上。通常,您的更新属性包中不存在该属性。当您从下一次应该使更新插件短路的代码调用更新时,请设置该属性。如果设置了属性,则会短路而不处理插件。

希望这有帮助。