了解 Dynamics CRM 中的插件交易

问题描述 投票:0回答:1

我想了解使用插件时如何提交事务。

我知道有4个主要操作 -

  • 预验证 - 外部交易

  • 预操作 - 内部交易

  • 后操作(同步)-内部事务

  • 后操作(异步)-外部事务

但是在以下场景中会发生什么:

  1. Entity A
    在后操作(同步)中注册了一个更新
    Entity B
    的步骤。

  2. Entity B
    在后期操作(异步)中注册了一个步骤

据我了解,这两个步骤将在同一个事务中执行,即使

Entity B
的步骤被注册为异步。

这是否意味着如果

Entity B
的异步步骤中发生错误,整个事务都会回滚?包括
Entity A
的同步步骤所做的更改?

此外,如果

Entity B
也有预验证步骤怎么办?
Entity A
的同步步骤触发时会跳过吗?

transactions dynamics-crm
1个回答
0
投票

当 Dataverse 收到例如表记录的更新,此事件在多个阶段中传递插件管道:

  • 预验证
  • 操作前
  • 主要操作
  • 术后
  • 异步操作

主操作是系统本身执行其工作的地方。对于所有其他阶段,我们可以注册自定义处理程序(插件步骤)。

当管道接收到来自外界的更新(通过 UI 或 API)时,预验证阶段将是外部数据库事务。一般来说,在这个阶段,自定义代码可以添加验证,甚至可以动态修改记录上的字段。当发现输入无效时,自定义代码可以通过抛出异常来取消更新。

预验证阶段之后,将打开一个数据库事务,并且在预操作主操作后操作阶段中执行的所有数据库操作都是该事务的一部分。因此,当过程中抛出异常时,所有已完成的创建、更新和删除操作都会回滚。

当Post操作阶段完成时,事务被提交。注册异步步骤后,系统将安排一个“异步操作”事件。这是数据库事务之外的,该事件将由另一个服务拾取。您可以在asyncoperation表中跟踪异步操作事件的处理情况。

在各个插件阶段自定义代码可以创建或更新系统中的相关记录。这些操作将通过相同的插件管道阶段,并将全部在原始数据库事务中执行。这意味着当插件更新记录时,其插件管道调用的预验证阶段将在初始数据库事务内。

© www.soinside.com 2019 - 2024. All rights reserved.