我有一个注册步骤,注册如下:
主要方法是
public void Execute()
{
throw new ArgumentException("DEBUG HALT");
}
该插件的目标是更改引发起源的Opportunity
中的字段(我将检索它,更改字段并更新它)。
保存报价(OnSave
事件)时,我已经有一些处理报价详情的脚本:
(涉及报价详情的整个过程我认为无关紧要,无论如何都很完美)
现在,当我点击Quote上的“保存”时,插件会被多次,而不是一次。我看到我的OData步骤失败并显示此插件的异常消息...
我检查了ParentContext
以查看发生了什么,我看到了
PrimaryEntityName = "quote"
MessageName = "Retrieve"
我希望与quotedetail
实体有关?我绝对不希望每个引用操作多次执行该步骤:此步骤也将在其他消息上注册(Create,Delete,Close,SetState),我非常希望它能够不重复一遍:是我追求的合理吗?我如何区分插件的触发方式/原因?
答案 0 :(得分:0)
您可以查看一些内容来检查插件上下文以确定发生了什么。在您的情况下,如果您要针对不同的实体注册插件,则需要检查Context.PrimaryEntityName
,Context.MessageName
和Context.Depth
以确定这是否是您的消息感兴趣。PrimaryEntityName
和MessageName
是自我解释的。 Context.Depth
会告诉您how many plugins have fired that caused this plugin to fire。
使用Depth属性时必须小心,因为还有更多 您可能遇到的复杂场景。例如,数据导入 可以触发工作流程来更新成员的“全名”,其中包含 转将执行我们的插件。在这种情况下,深度将是3 首次执行插件。如果您将代码段保留在上方 没有改变,插件逻辑永远不会被执行。
只要您了解所有相互触发的插件,插件参数可能是更好的选择。