Dynamics CRM插件和Web服务中的事务

时间:2016-09-14 11:33:48

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

我想确认我对在Dynamics CRM中管理交易的理解,并检查我是否遗漏了某些内容。

1)CRM插件中的交易 在事件管道的阶段20和40中注册的插件在数据库事务下运行。因此,如果我在任何消息的前/后操作中注册了三个插件,并且如果第三个插件抛出异常,则前两个插件所做的更改也将被回滚。这种理解是否正确?

2)CRM Web服务中的事务: 在使用CRM Web服务编写代码的情况下,我可以使用ExecuteTransactionRequest请求,并且此消息提供的所有请求消息都将在一个CRM DB事务下运行。这条消息似乎是在2016年版本中引入的,那么在2016年之前处理此类场景的理想方式是什么?

1 个答案:

答案 0 :(得分:5)

1)假设插件全部同步运行,则是,所有更改都应该回滚。

  

<强> Inclusion in database transactions

     

插件可能会也可能不会在Microsoft Dynamics CRM的数据库事务中执行   平台。插件是否是事务的一部分取决于   管道如何处理消息请求。你可以检查一下   插件通过读取IsInTransaction在事务中执行   由IPluginExecutionContext继承的属性,传递给   插入。如果插件正在数据库事务中执行,那么   允许将异常传递回整个平台   交易将被回滚。第20和第40阶段保证   数据库事务的一部分,而阶段10可能是部分   交易。

     

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

2)

  • 是ExecuteTransactionRequest是一项新的CRM 2016功能。
  • 如果你有CRM 2013+,你可以将逻辑放在支持自动回滚的Action内。然后用输入调用操作。
  • 对于CRM 2011,将逻辑放在插件中。然后导致插件被触发,例如通过在CRM中创建记录。您还可以在新记录上捕获输入。