Dyl*_*tie 5 dynamics-crm dynamics-crm-online dynamics-crm-2015
我正在为 Dynamics CRM(2015 和 CRM Online)的自定义 C# 插件注册插件。
当您使用 Visual Studio CRM Explorer 创建新插件时,您会看到标准的“创建插件”对话框:
在“管道阶段”下,有三个选项:
选择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>
Run Code Online (Sandbox Code Playgroud)
关键部分是那条中间线,它说 Stage="PostOutsideTransaction"
该工具生成的相应 C# 代码包括以下行:
base.RegisteredEvents.Add(
new Tuple<int, string, string, Action<LocalPluginContext>>(
40,
"Create",
"contact",
new Action<LocalPluginContext>(ExecutePostContactCreate)
)
);
Run Code Online (Sandbox Code Playgroud)
插件注册中的神奇数字 40 似乎对应于https://msdn.microsoft.com/en-gb/library/gg327941.aspx 中记录的“管道阶段” ,它说
事后
术后
40
在主要操作之后执行的插件的管道中的阶段。在此阶段注册的插件在数据库事务中执行。
所以我得到了由明确说明PostOutsideTransaction的工具生成的注册 XML ,以及由指定阶段 40 的同一工具生成的 C# 代码,它是“在数据库事务中执行”
那么它是哪个?XML 注册语法是否使用了误导性名称,或者这是插件创建工具中的错误,还是执行管道在做一些我不理解的聪明事情?
这取决于您的操作后插件步骤注册的消息。对于最常见的消息,该步骤在数据库事务内执行:
CreateUpdateDeleteSetStateAssign一些其他消息可以在数据库事务之外执行,例如Publish和PublishAll,而对于其他消息则有所不同(Retrieve, RetrieveMultiple)。
在IPluginExecutionContext对象中您可以检查IsInTransaction属性。
| 归档时间: |
|
| 查看次数: |
1178 次 |
| 最近记录: |