我构建了一个在帐户更新消息中运行的插件,该插件使得一些验证不会复制记录。但是,如果我尝试禁用该帐户或与另一个帐户合并,则会触发该插件。
如何通过激活/停用/合并操作或事件模式(如CRM Dynamics 2011 Save Event Arguments Reference中的事件模式)触发插件?
答案 0 :(得分:2)
要添加到Pete Oakey的答案,除了在实际代码@ runtime中测试此内容之外,您实际上可以告诉您的插件仅在 registration 阶段更改某些字段时触发,通过更改插件步骤的“过滤属性”。因此,除非您的验证逻辑特别需要StateCode
/ StatusCode
属性才能正确处理,否则您可以过滤掉这两个属性,或者只包含验证逻辑所需的属性。
原始答案:
我相信您可以引用IPluginExecutionContext
对象的IExecutionContext.Depth Property
。
每次正在运行的插件或工作流发出消息请求时 触发另一个插件或工作流执行的Web服务, 执行上下文的Depth属性增加。如果深度 属性在配置的时间内递增到其最大值 限制,平台认为这种行为是无限循环的 进一步插件或工作流程执行中止。最大深度 (8)和时间限制(一小时)可由Microsoft配置 Dynamics CRM管理员。
因此您可以使用if语句检查 Depth > 1
。
答案 1 :(得分:1)
一种方法是比较插件中帐户实体更改内容的前后值。例如,如果您在值中只有active
(如果这是正确的属性名称) - 您可以查看after值以查看发生了什么。
另一种方法是为这些消息添加一个特定的插件,并设置一些属性/标志,你可以在更新插件中检查。显然,这必须在更新插件之前运行。