Dynamics CRM插件是否在数据库事务内部或外部注册为“后期操作”?

时间:2016-03-17 15:55:12

标签: dynamics-crm dynamics-crm-online dynamics-crm-2015

我正在为Dynamics CRM(2015和CRM Online)的自定义C#插件进行插件注册。

使用Visual Studio CRM Explorer创建新插件时,您将获得标准的“Create Plug-in”对话框:

enter image description here

在“管道阶段”下,有三个选项:

  1. 预验证
  2. 预操作
  3. 后操作
  4. 在此处选择Post-Operation会导致此代码被添加到XML注册文件中:

        <Plugin Description="..." FriendlyName="PostContactCreate" Name="Cacheron.PostContactCreate" Id="00000000-0000-0000-0000-000000000000" TypeName="Cacheron.PostContactCreate">
          <Steps>
            <clear />
            <Step CustomConfiguration="" Name="PostContactCreate" Description="Post-Operation of Contact Create" Id="00000000-0000-0000-0000-000000000000" MessageName="Create" Mode="Synchronous" PrimaryEntityName="contact" Rank="1" SecureConfiguration="" Stage="PostOutsideTransaction" SupportedDeployment="ServerOnly">
              <Images />
            </Step>
          </Steps>
        </Plugin>
    

    关键部分是中间线,其中显示Stage="PostOutsideTransaction"

    该工具生成的相应C#代码包含以下行:

    base.RegisteredEvents.Add(
      new Tuple<int, string, string, Action<LocalPluginContext>>(
        40, 
        "Create", 
        "contact", 
        new Action<LocalPluginContext>(ExecutePostContactCreate)
      )
    );
    

    插件注册中的幻数40似乎与https://msdn.microsoft.com/en-gb/library/gg327941.aspx中记录的“管道阶段”相对应,后者表示

      

    事件后

         

    后操作

         

    40

         

    在主要操作之后执行的插件的管道中的阶段。在此阶段注册的插件在数据库事务中执行。

    所以我已经通过明确说明 PostOutsideTransaction 的工具生成了注册XML,以及由指定阶段40的同一工具生成的C#代码,该工具在数据库事务中“执行

    那是哪个? XML注册语法是否使用误导性名称,或者这是插件创建工具中的错误,还是执行管道做了一些我不理解的聪明事情?

2 个答案:

答案 0 :(得分:3)

这取决于您的帖子操作插件步骤注册的消息。对于最常见的消息,该步骤在数据库事务中执行:

  • Create
  • Update
  • Delete
  • SetState
  • Assign

可以在数据库事务之外执行一些其他消息,例如, PublishPublishAll以及其他RetrieveRetrieveMultiple

IPluginExecutionContext对象中,您可以查看IsInTransaction属性。

答案 1 :(得分:2)

40绝对是后期操作和交易内部。您可以很容易地判断出这种情况,因为如果您的stage 40插件步骤抛出异常,则触发插件的整个操作将被回滚。

在一个不相关的说明中,我强烈建议您从SDK中放弃开发人员工具包。由于多种原因,它很麻烦且非常烦人。我强烈推荐免费和开源CRM Developer Extensions,它会更好。