【问题标题】:Dynamic CRM 2013 Plugin pipeline stage and database rollback动态 CRM 2013 插件管道阶段和数据库回滚
【发布时间】:2015-09-20 20:30:09
【问题描述】:

我在同一个管道阶段(操作后)注册了 2 个插件,并在同一个实体 Entity A(创建事件)上触发。

当插件 1 在 Entity A 上触发(创建事件)并对 Entity B 进行更改,而另一个插件 2 在 Entity A 上触发(创建事件)并在对 Entity A 进行更改时引发异常。

插件 1 对 Entity B 所做的更改是否会回滚,因为这两个插件在同一个实体上触发并且它们具有相同的管道阶段或插件 1 对 Entity B 所做的更改 保留且不会回滚?

【问题讨论】:

标签: dynamics-crm-2011 dynamics-crm dynamics-crm-2013


【解决方案1】:

取决于插件事务。

Event execution pipeline

插件可能会也可能不会在 Microsoft Dynamics CRM 平台。插件是否属于 事务取决于消息请求的处理方式 管道。您可以检查插件是否在事务中执行 通过读取 IsInTransaction 继承的属性 传递给插件的 IPluginExecutionContext。 如果插件是 在数据库事务中执行并允许异常 传回平台,整个交易将被滚动 背部。阶段(操作前)20 和(操作后)40 保证是数据库的一部分 交易,而第 10 阶段可能是交易的一部分。

在数据库事务期间执行的任何注册插件 并且将异常传递回平台会取消核心 手术。这会导致核心操作回滚。在 此外,任何具有事件前或事件后注册的插件 尚未执行以及由同一事件触发的任何工作流 插件注册的那个将不会执行。

在您的情况下,如果插件链接在一起,并且第二个是同步的,则插件 2 的异常将冒泡到插件 1。如果两个插件都在事务中,则两个插件的操作都会回滚。

【讨论】:

  • 你的意思是链接在一起,两者都是同步的并且都在同一个管道阶段?如果其中一个或两个都是异步的会发生什么?
  • 链接在一起的是第一个触发第二个。如果第二个是异步的,那么第二个的异常将不会返回给第一个。第一个很可能在第二个正确开始之前结束。所以第一个不会因为事务而回滚,但第二个会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多