代码之家  ›  专栏  ›  技术社区  ›  Ashish

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

  •  5
  • Ashish  · 技术社区  · 9 年前

    我想确认我对在Dynamics CRM中管理事务的理解,并检查我是否遗漏了什么。

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

    2) CRM Web Service中的事务: 如果使用CRM Web Services编写代码,我可以利用 ExecuteTransactionRequest 请求和此消息提供的所有请求消息将在一个CRM DB事务下运行。2016年版似乎引入了这一信息,那么在2016年之前处理此类情况的理想方式是什么?

    1 回复  |  直到 9 年前
        1
  •  5
  •   James Wood    9 年前

    1) 假设所有插件都同步运行,那么是的,所有更改都应该回滚。

    Inclusion in database transactions

    插件可能在Microsoft Dynamics CRM的数据库事务中执行,也可能不执行 站台插件是否是事务的一部分取决于 管道如何处理消息请求。你可以检查一下 插件通过读取IsInTransaction在事务中执行 传递给 插件。如果插件正在数据库事务中执行,并且 事务将回滚。阶段20和40保证 数据库事务的一部分,而阶段10可能是 交易

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

    2)

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