Dynamics crm 2011 动态CRM 2013插件管道阶段和数据库回滚

Dynamics crm 2011 动态CRM 2013插件管道阶段和数据库回滚,dynamics-crm-2011,dynamics-crm,dynamics-crm-2013,Dynamics Crm 2011,Dynamics Crm,Dynamics Crm 2013,我在同一管道阶段(后期操作)注册了2个插件,并在同一实体实体A(创建事件)上触发了触发器 当插件1触发实体A(创建事件)并更改实体B时,另一个插件2触发实体A(创建事件),并在更改实体A时引发异常 插件1对实体B所做的更改是否会回滚,因为两个插件都在同一实体上触发,并且它们具有相同的管道阶段,或者插件1对实体B所做的更改仍然存在并且不会回滚?取决于插件事务 插件可以在事务的数据库中执行,也可以不在事务的数据库中执行 Microsoft Dynamics CRM平台。插件是否是 事务取决于消息请

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

当插件1触发实体A(创建事件)并更改实体B时,另一个插件2触发实体A(创建事件),并在更改实体A时引发异常


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

取决于插件事务

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

在数据库事务期间执行的任何已注册插件 然后将异常传递回平台,取消核心 活动这将导致核心操作的回滚。在里面 此外,任何已注册的事件前或事件后插件 尚未执行以及由同一事件触发的任何工作流 为其注册的插件将不会执行


在您的例子中,如果插件链接在一起,而第二个插件是同步的,那么插件2的异常将出现在插件1中。如果两个插件都在一个事务中,那么两个插件的操作都会回滚。

本质上,您的问题与本文中的问题相同:谢谢您的评论。实际上,这里我问的是关于数据库回滚的问题。你的意思是说链接在一起,两者都是同步的,并且都在同一个管道阶段?如果其中一个或两个都是异步的,会发生什么?链接在一起的是第一个触发第二个。如果第二个是异步的,那么第二个异常将不会返回到第一个异常。第一个可能在第二个正确开始之前结束。因此,第一个不会因为事务而回滚,但第二个会回滚。