我想确认我对在Dynamics CRM中管理交易的理解,并检查我是否遗漏了某些内容。
1)CRM插件中的交易 在事件管道的阶段20和40中注册的插件在数据库事务下运行。因此,如果我在任何消息的前/后操作中注册了三个插件,并且如果第三个插件抛出异常,则前两个插件所做的更改也将被回滚。这种理解是否正确?
2)CRM Web服务中的事务: 在使用CRM Web服务编写代码的情况下,我可以使用ExecuteTransactionRequest请求,并且此消息提供的所有请求消息都将在一个CRM DB事务下运行。这条消息似乎是在2016年版本中引入的,那么在2016年之前处理此类场景的理想方式是什么?
答案 0 :(得分:5)
1)假设插件全部同步运行,则是,所有更改都应该回滚。
<强> Inclusion in database transactions 强>
插件可能会也可能不会在Microsoft Dynamics CRM的数据库事务中执行 平台。插件是否是事务的一部分取决于 管道如何处理消息请求。你可以检查一下 插件通过读取IsInTransaction在事务中执行 由IPluginExecutionContext继承的属性,传递给 插入。如果插件正在数据库事务中执行,那么 允许将异常传递回整个平台 交易将被回滚。第20和第40阶段保证 数据库事务的一部分,而阶段10可能是部分 交易。
在数据库期间执行的任何已注册插件 事务并将异常传递回平台取消 核心业务。这导致核心操作的回滚。 此外,任何事件前或事件后注册的插件都有 尚未执行以及由同一事件触发的任何工作流程 注册的插件将不会执行。
2)