我有一个自定义实体的简单插件,设置为在我的自定义实体更新时触发。它在Post Operation阶段注册。当我更改记录的Owner字段以及其他标准字段(例如文本框,日期等)时,我注意到了一些奇怪的行为。
插件第一次触发,图像中遇到的唯一属性是所有常规字段。所有者字段没有遇到。
然后该插件再次触发,但上下文的深度属性仍然只是一个(即插件不会被插件代码中的更改触发) 。在此插件的运行中,遇到的属性只是所有者字段。
我的理论是,因为所有者字段是“特殊的”,CRM正在执行两个不同的请求 - 一个用于更改常规字段,另一个请求通过 AssignRequest 更改所有者。但是,我找不到任何关于此行为的“官方”文档。
有人可以解释为什么会这样吗?
我正在运行Dynamcs CRM 2013 UR2
答案 0 :(得分:2)
Update
事件期间Assign
事件将触发。因此,如果进行了分配,您的插件将会执行。 SetState
也是如此 - 如果您激活/停用记录,则会发生Update
事件。这些项目未在SDK中记录。
一个好的做法是在你的Update
插件上使用属性过滤,这样它只会触发它关注的字段 - 假设它没有查看所有者相关字段,则会避免它被触发两次。如果您具有记录所有权的特定逻辑,则可以将其放在Assign
事件中注册的插件中。
答案 1 :(得分:1)
我无法找到关于此的官方文档,但我认为分配消息是您正在寻找的(如果该实体是用户拥有的。请参阅http://msdn.microsoft.com/en-us/library/gg328576.aspx。我强烈建议您指定过滤属性如果你在更新消息上注册一个插件。你也可以调试你的插件并检查插件上下文的MessageName属性,看看是什么消息被触发。我希望这有帮助。