CRM 2011插件中的共享变量

时间:2014-03-03 23:21:27

标签: c# dynamics-crm-2011 dynamics-crm

我试图在对同一个插件的不同调用之间使用IPluginExecutionContext的SharedVariable。我有以下情况:

用户正在尝试创建新的实体记录,并且该插件已在Pre阶段触发。根据一些逻辑,我设置了一个像这样的SharedVariable:

 var context = (IPluginExecutionContext) serviceProvider.GetService(typeof (IPluginExecutionContext));
 context.SharedVariables.Add("MySharedVariable", true);
然后,我尝试更新同一实体的其他记录,如下所示:

var qe = new QueryExpression("new_myentity");
qe.Criteria.AddCondition("ecs_myfield", ConditionOperator.Equal,"someValue");
var results = service.RetrieveMultiple(qe);

foreach (var foo in results.Entities)
{
    //Do something to foo
    service.Update(foo);
}

我也有一个在Pre阶段注册Update的插件,但是,我想检查MySharedVariable并根据它是否设置做其他事情。

在更新中,上下文不包含“MySharedVariable”的键。我已经通过使用ITracingService确认了这一点。

在不同记录上运行的插件之间传递共享变量是否有一些限制?

Create和Update的插件执行模式设置为Synchronous,如前所述,两者都在Pre Operation阶段注册

2 个答案:

答案 0 :(得分:4)

我不经常使用SharedVariables,但我确信它们在相同的执行上下文中可用(例如,从同一记录中的同一消息的事件前事件到事件事件)。 / p>

它们不能用于在不同记录上的不同消息上的不同插件之间共享值(在您的情况下:在Create of one record中设置值并检索不同记录的Update消息中的值)< / p>

对于您的情况,我认为最好使用自定义实体来存储值,或者为实体创建其他属性。

答案 1 :(得分:0)

嗨,看看你解释过的情景。

我无法对自己进行测试。但是如果您将更新插件从Pre更改为Post。

如果您将更新插件从 PRE-Operation 更改为后期操作。您肯定会在执行上下文中获得SharedVariable。

Pass Data Between Plug-Ins

CRM 2011 Plugins – Shared Variables