Plugins 识别更新插件是由详细记录中的更改引起的
我注册了一个插件步骤,如下所示:Plugins 识别更新插件是由详细记录中的更改引起的,plugins,dynamics-crm-2011,dynamics-crm,Plugins,Dynamics Crm 2011,Dynamics Crm,我注册了一个插件步骤,如下所示: 沙箱、数据库 更新消息 报价实体 手术后(第40阶段) 同步执行,仅在线 主要方法很简单 public void Execute() { throw new ArgumentException("DEBUG HALT"); } 该插件的目标是更改Opportunity中的一个字段,该字段是引用的来源(我将检索它,更改该字段,然后更新它) 保存报价时(OnSaveevent),我已经有了一些处理报价详细信息的脚本: 删除所有报价详细信息(通过ODa
- 沙箱、数据库
- 更新消息
- 报价实体
- 手术后(第40阶段)
- 同步执行,仅在线
public void Execute()
{
throw new ArgumentException("DEBUG HALT");
}
该插件的目标是更改Opportunity
中的一个字段,该字段是引用的来源(我将检索它,更改该字段,然后更新它)
保存报价时(OnSave
event),我已经有了一些处理报价详细信息的脚本:
- 删除所有报价详细信息(通过OData)
- 从外部源读取报价详细信息数据
- 重新创建报价详细信息(通过OData)
ParentContext
,查看发生了什么,我看到了
PrimaryEntityName = "quote"
MessageName = "Retrieve"
我希望与
quotedetail
实体有关?我绝对不想在每个报价操作中执行该步骤不止一次:该步骤也将在其他消息(创建、删除、关闭、设置状态)上注册,我非常希望它不会重复:我所追求的是否合理?如何区分插件是如何/为什么启动的?您可以查看一些内容来检查插件上下文,以确定发生了什么。在您的情况下,如果要针对不同的实体注册插件,您需要检查上下文.PrimaryEntityName
,上下文.MessageName
,和上下文.Depth
,以确定这是否是您感兴趣的消息。PrimaryEntityName
和MessageName
是不言自明的。Context.Depth
将告诉您
使用“深度”属性时必须小心,因为有更多
您可能会遇到的复杂场景。例如,数据导入
可能会触发工作流以更新成员的“全名”,在
turn将执行我们的插件。在这种情况下,底部的深度将为3
插件的第一次执行。如果您留下了上面的代码段
不变,插件逻辑将永远不会执行
只要您了解所有相互触发的插件,插件参数可能是一个更好的选择。不幸的是
Depth
始终为1(我有点期待这一点,只涉及一个插件步骤),我将更仔细地观察父上下文,希望有什么变化如果深度
是1
,那么就有什么东西执行了插件所说的发生的事情。Context.PrimaryEntityName
和Context.MessageName
将包含导致插件启动的触发器。这将通过Ui或SDK引起。