我试图在对同一个插件的不同调用之间使用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阶段注册
答案 0 :(得分:4)
我不经常使用SharedVariables
,但我确信它们在相同的执行上下文中可用(例如,从同一记录中的同一消息的事件前事件到事件事件)。 / p>
它们不能用于在不同记录上的不同消息上的不同插件之间共享值(在您的情况下:在Create of one record中设置值并检索不同记录的Update消息中的值)< / p>
对于您的情况,我认为最好使用自定义实体来存储值,或者为实体创建其他属性。
答案 1 :(得分:0)
嗨,看看你解释过的情景。
我无法对自己进行测试。但是如果您将更新插件从Pre更改为Post。
如果您将更新插件从 PRE-Operation 更改为后期操作。您肯定会在执行上下文中获得SharedVariable。