2

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

更新:

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

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

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

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

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

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

4

2 回答 2

4

The OwningExtension property available on the IPluginExecutionContext will return an EntityReference to the SdkMessageProcessingingStep which should provide all the information you need.

What are you trying to achieve by registering the same plugin twice for the same Message and Stage? I'm struggling to think of a valid scenario.

于 2012-12-27T16:35:07.567 回答
1

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

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);
  }
}

Then, of course, you need to implement those methods too. And usually I have a private field that hold the reference to context. It's good to be able to access it easily when the need arises. Also, you can (and should) check if the message is supported by your plug in, if there's a Target and if it's of the right entity type. Stuff like that.

于 2012-12-26T20:47:41.440 回答