【问题标题】:Crm 2011 how to get the stepid in which the plugin is executingcrm 2011如何获取插件正在执行的stepid
【发布时间】:2012-12-29 19:06:34
【问题描述】:

在 crm 2011 中,在插件的 Execute 方法中,我如何知道正在执行的已注册步骤的 id?例如,我有两个步骤来预创建帐户。 execute 方法将运行两次,每个步骤一次。我需要在 execute 方法中知道实际运行的步骤的 stepid。我在上下文中找不到它。

更新:

我在这里更新以解释该场景,因为在 cmets 中我没有足够的字符。所以场景:

我有一个自动编号实体的解决方案,使用户能够按照他们想要的方式格式化他们的数字。

为此,我有一个实体(自动编号),他们在其中配置格式、实体和他们想要编号的字段。每次为自动编号实体创建记录时,它将在要编号的实体(例如帐户)的创建消息的预操作中动态创建和注册一个步骤。 执行该步骤时,它将加载自动编号记录以了解如何对帐户字段进行编号。

创建的步骤必须链接到自动编号记录,并且自动编号实体具有存储步骤 id 的属性。此属性在创建步骤时在自动编号实体的预创建时填充。 此链接属性允许在用户删除自动编号记录时取消注册该步骤,因为它确切地知道要取消注册的步骤。如果有更多插件注册到帐户,它还允许用户设置执行步骤的顺序。

我遇到的问题是当我想为同一实体编号 2 个或更多属性时。在这种情况下,用户将创建自动编号实体的 2 条记录,以便对帐户的 2 个字段进行编号。在这种情况下,我将在帐户中注册 2 个步骤。创建帐户时,一个步骤将为一个字段编号,另一步骤将为另一个字段编号。这就是为什么我需要知道正在执行的步骤的 ID 以便加载正确的自动编号记录。

很抱歉解释繁琐,但这个场景有点复杂,我不确定我是否足够清楚,但如果你愿意,我会尝试更清楚。

【问题讨论】:

    标签: plugins dynamics-crm-2011 dynamics-crm


    【解决方案1】:

    IPluginExecutionContext 上可用的OwningExtension 属性将向SdkMessageProcessingingStep 返回一个EntityReference,它应该提供您需要的所有信息。

    您想通过为相同的 Message 和 Stage 注册两次相同的插件来达到什么目的?我正在努力想一个有效的场景。

    【讨论】:

    • 一个非常通用的插件,例如具有跨许多实体和这些实体中的不同字段执行的共同行为......这将接收“什么实体,实体上的哪些字段”的插件配置以采取行动 - 肯定会导致同一实体上的多个步骤和信息。基本上,不仅仅是另一个简单的插件。
    【解决方案2】:

    您可以从上下文中获取消息的名称。通常,我会做类似的事情。

    public void Execute(IServiceProvider serviceProvider)
    {
      IPlugingExecutionContext context 
        = (IPlugingExecutionContext)serviceProvider
          .getService(typeof(IPlugingExecutionContext));
    
      switch(context.MessageName)
      {
        case "Create" ExecuteCreate(); break;
        case "Retrieve" ExecuteCreate(); break;
        case "Update" ExecuteCreate(); break;
        case "Delete" ExecuteCreate(); break;
        default ExecuteFunctionality(Context.MessageName);
      }
    }
    

    那么,当然,您也需要实现这些方法。通常我有一个私有字段来保存对 context 的引用。能够在需要时轻松访问它是件好事。此外,您可以(并且应该)检查您的插件是否支持该消息,是否有 Target 以及它是否属于正确的实体类型。诸如此类。

    【讨论】:

    • 这不是我想要的消息名称。正如我所解释的,这两个步骤都在帐户实体的 Create 消息的 PreOperation 中注册。每个步骤都有一个 id,如果您使用的是插件注册工具,您可以看到该 id。这两个步骤都将调用相同的 Execute 方法。所以在那个方法中我需要知道哪个正在执行,为此我需要 StepId。
    • @budahead 那么我一定误解了这个问题。我看到其他人已经给出了另一个答案,所以没有必要重复它。我和 Daz 一样,想知道您能否描述项目中的场景。我从来没有像你描述的那样设置两个不同步骤的插件。不是说这是错的——我只是好奇。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多