Dynamic CRM 2013 插件事件执行管道和 2 分钟超时
Dynamic CRM 2013 Plugin Event execution pipeline and the 2 Minutes Time out
请问我几个问题。
1- 当 插件 A 触发事件并导致另一个 插件 B 触发时,插件 B 在与 插件 A?
相同的事件执行管道中执行
2- 如果以上为真,并且 插件 A 和 插件 B 在同一个事件执行管道中执行,它们是否都有 2分钟完成(因为动态 CRM 中插件的最大执行时间为 2 分钟)或每个插件有 2 分钟完成,这使得它们完成的总执行时间为 4 分钟?
谢谢。
在插件上下文中这不是真的,但我想取决于你如何注册插件,如果你从插件 A 执行创建操作,并且插件 B 在该操作上被触发,如果插件 B 是同步的( pre-validation, pre-operation),那么plugin A需要等待plugin B完成。插件 B 仍然需要 2 分钟 window 才能完成,可能 window 比 2 分钟稍长 - 插件 A 的执行时间,但是当插件 A 将被终止时,因为它已经超过了它的执行时间,插件 B 将在他自己的 2 分钟限制后终止(我正在想象一个汇总场景)。
我猜你的答案是否定的,它们不会在同一个事件中执行,但总的执行时间取决于你如何注册插件 B,是同步的还是异步的。
插件 B 将在插件 A 的子管道中执行。
在 Dynamics CRM 2011 中,为了简化插件开发,放弃了父子管道的概念,但在底层它们仍然存在。您可以通过检查 IPluginExecutionContext.ParentContext
属性.
来了解您的插件在哪个上下文中执行
例如当您的插件注册了 Update 消息时,父管道实际上可以在 Assign 或 SetState 消息的上下文中显示为 运行。此外,当自定义插件代码对记录进行更新时,更新将在单独的子管道中执行。
在沙箱中,根管道必须在 2 分钟内完成。对于 同步插件步骤 这意味着所有后续子管道任务也需要在 window.
内完成
异步插件步骤然而在这里不起作用,因为它们是在单独的进程中执行的。请记住,插件代码不能无休止地创建子管道实例。为了防止无休止的 运行 循环,系统允许插件的步进深度不超过 8 级。您可以使用 属性 IPluginExecutionContext.Depth
.
进行检查
请问我几个问题。
1- 当 插件 A 触发事件并导致另一个 插件 B 触发时,插件 B 在与 插件 A?
相同的事件执行管道中执行2- 如果以上为真,并且 插件 A 和 插件 B 在同一个事件执行管道中执行,它们是否都有 2分钟完成(因为动态 CRM 中插件的最大执行时间为 2 分钟)或每个插件有 2 分钟完成,这使得它们完成的总执行时间为 4 分钟?
谢谢。
在插件上下文中这不是真的,但我想取决于你如何注册插件,如果你从插件 A 执行创建操作,并且插件 B 在该操作上被触发,如果插件 B 是同步的( pre-validation, pre-operation),那么plugin A需要等待plugin B完成。插件 B 仍然需要 2 分钟 window 才能完成,可能 window 比 2 分钟稍长 - 插件 A 的执行时间,但是当插件 A 将被终止时,因为它已经超过了它的执行时间,插件 B 将在他自己的 2 分钟限制后终止(我正在想象一个汇总场景)。
我猜你的答案是否定的,它们不会在同一个事件中执行,但总的执行时间取决于你如何注册插件 B,是同步的还是异步的。
插件 B 将在插件 A 的子管道中执行。
在 Dynamics CRM 2011 中,为了简化插件开发,放弃了父子管道的概念,但在底层它们仍然存在。您可以通过检查 IPluginExecutionContext.ParentContext
属性.
例如当您的插件注册了 Update 消息时,父管道实际上可以在 Assign 或 SetState 消息的上下文中显示为 运行。此外,当自定义插件代码对记录进行更新时,更新将在单独的子管道中执行。
在沙箱中,根管道必须在 2 分钟内完成。对于 同步插件步骤 这意味着所有后续子管道任务也需要在 window.
内完成异步插件步骤然而在这里不起作用,因为它们是在单独的进程中执行的。请记住,插件代码不能无休止地创建子管道实例。为了防止无休止的 运行 循环,系统允许插件的步进深度不超过 8 级。您可以使用 属性 IPluginExecutionContext.Depth
.