Gre*_*ens 8 dynamics-crm infinite-loop dynamics-crm-2011
我应该从一开始就添加 - 这是在Microsoft Dynamics CRM 2011中
我很了解CRM,但我无法解释当前部署的行为.
请阅读我的场景概要,以帮助我理解我的哪些假设/理解是错误的(因此导致此错误的原因).这与我的期望不符.
此工作流作业已取消,因为启动它的工作流包含无限循环.更正工作流逻辑,然后重试.有关工作流逻辑的信息,请参阅帮助.
首先,我认为在这种情况下忽略插件代码的内容是非常安全的.它工作正常,它是原子的,几乎不接触CRM(很明显,它是一个运行远程Web服务的事件前插件,等待响应,然后在我的Trigger记录上设置"完成日期"日期/时间属性,然后通过目标实体回到管道中).只要创建了一个Trigger记录,该代码就会运行并执行它应有的操作.
打了插件的内容后,可能会有一个问题,我不喜欢在实体的预创建步骤中注册插件...
这就离开了工作流程本身.这是一个简单的.它如此运行:
通过这种设置,我手动创建一个新的Trigger记录,并且该过程很好地实现了动作.向前滚动1小时58分钟(基于我运行的最后一个循环 - 记住我的插件代码可能需要一分钟才能完成运行),经过7个成功的执行周期(即创建并完成新的工作流程作业)后,第8个失败了上述错误.
默认情况下,递归深度设置为8.如果工作流/插件自身调用8次,则会检测到无限循环.
递归深度每隔一小时重置一次(或10分钟 - 请参阅链接博客中的"警告"?)
可以在内部部署中使用部署Web服务 通过PowerShell或SDK代码设置递归深度设置(通过Set-CrmSetting Cmdlet)
"更改递归深度设置"
我无法更改部署递归深度设置,因为这不是在线方案中的选项 - 最终我也将部署到CRM Online.
" 延长工作流程的超时时间 "
这也不是一个选项 - 重新索引需要每15分钟发生一次,理想情况下更快.
@Boone在下面建议递归深度超时在60分钟不活动后重置,而不是每60分钟重置一次.这是第一个误解.
在与@alex讨论时,我建议在通过工作流创建实体和产生最终产生的工作流之间可能存在一些持久性的CorrelationId ......好吧.插件和工作流中的CorrelationId相同,并且该线程的任何记录都是相同的.我现在正在研究如何从实体和工作流中分离CorrelationId(或者可能是创建记录).
为了进行一小时的“重置”,您必须在一小时内没有任何活动。它不会从原始状态仅重置 1 小时。因此,由于您每 15 分钟就有一次活动,因此它永远没有机会重置。我不知道任何地方都有这样的规定……但根据我的经验。
在 CRM 4 中,可以创建 CRM 服务(Google在子管道中创建 CRM 服务)并重置相关 ID(使用 CorrelationToken.NewToken())。我在 2011 SDK 中没有看到任何如此简单的事情。不知道这个技巧在在线环境中是否有效。2011 Online 是否向后兼容 CRM 4 插件?
您可以尝试的一件事是使用 IExecutionContext.CorrelationId 来清理 asyncoperation(系统作业)表。但根据元数据,我认为可能有用的属性(CorrelationId、CorrelationUpdatedTime、Depth)对于更新无效。 也许你可以删除这些行?即使这样也可能无济于事。
| 归档时间: |
|
| 查看次数: |
9532 次 |
| 最近记录: |