【问题标题】:Plugin not propagating on field change插件未在字段更改时传播
【发布时间】:2015-03-29 12:17:35
【问题描述】:

我有三个实体,我们称它们为 AlphaBetaGamma。注册了两个插件来触发消息Update,分别是发布操作和同步。

其中一个在 Alpha 中的字段 aja 发生变化时被调用,并且它在任何相关实例中设置字段 baja 的值测试版。当 Beta 中的字段 baja 发生变化时调用第二个,它会在任何相关的 Gamma 中设置字段 gaja 的值em>。

当我对 aja 进行更改时,我可以确认更新已传播到相关实例中的所有 bajabaja 上的相应操作会更新所有相关实例的 gaja

让我抓狂的是 aja 中的更改(这显然会触发第一个插件导致 baja 中的更新)不会触发第二个插件设置gaja 中的值。

我预计 Alpha 的变化会传播到 Gamma,因为它应该是这样工作的。我怀疑我错过了什么,但经过几次尝试、日志检查、哭泣和咒骂后,我迷路了。我能错过什么愚蠢的东西?!

【问题讨论】:

  • 也许你有一个上下文。在你的第二个插件中进行深度检查?
  • 我愿意。但该实体并没有调用自己。它是从另一个实体调用的,所以深度应该还是 1。对吧?
  • 哦,伙计...我只是明确地打印出深度并猜猜是什么。你是正确的。显然深度也在实体之间累积。这就提出了一个问题,如果我需要将自循环实体的深度限制在某个最大值和从其他地方调用时的其他值......无论如何,将你的东西作为回复发布,这样我就可以将其标记为回答。

标签: c# plugins dynamics-crm dynamics-crm-2013


【解决方案1】:

您通常面临的行为与IExecutionContext.Depth 检查有关

https://msdn.microsoft.com/en us/library/microsoft.xrm.sdk.iexecutioncontext.depth.aspx

因为插件在当前事务中运行是同步的,所以它们会导致 Depth 属性的增量。

在你的第二个插件中检查if (context.Depth > 2) { return; } 可能会解决问题。

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2018-06-23
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多