我为Dynamics 4.0编写了一个插件,用于在重新打开商机实体时更改选项列表的值。选项列表值已正确更新,但在表单关闭并重新打开之前,表单不会显示此内容。
这是我的插件:
public void Execute(IPluginExecutionContext context)
{
if (context.InputParameters.Properties.Contains("Target") &&
context.InputParameters.Properties["Target"] is DynamicEntity)
{
ICrmService service = context.CreateCrmService(false);
DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties["Target"];
Key key = (Key)entity.Properties["opportunityid"];
DynamicEntity DynamicOpportunity = GetOpportunity(service, key.Value);
Picklist StageCodePicklist = (Picklist)DynamicOpportunity.Properties["salesstagecode"];
StageCodePicklist.IsNull = false;
StageCodePicklist.IsNullSpecified = false;
StageCodePicklist.name = "Advocating - Advanced (90%)";
StageCodePicklist.Value = 200004;
DynamicOpportunity.Properties["salesstagecode"] = StageCodePicklist;
service.Update(DynamicOpportunity);
}
}
我为StageCodePicklist上的属性分配的信息来自对数据库运行的以下查询:
select * from stringmap where attributename='salesstagecode'
重申一下,我重新打开了一个机会,并且salesstagecode 正确更新,但表单显示旧值。关闭表单并以相同的机会重新打开表明新值确实存在于数据库中。
我几乎想知道这是否是CRM的错误 - 当然表单应该显示更新的值而不必关闭并重新打开表单。但除此之外,有什么我可以做的,以便用户不必这样做才能看到更新的值而不是旧值?
答案 0 :(得分:2)
无论您是在前期还是后期注册,都应该在表单重新加载时反映出来。唯一会延迟更新的是你注册了你的插件以异步方式运行,在这种情况下它运行在后台异步服务中。
您在哪个模式注册插件步骤? (1 =异步,0 =同步)。
此外,如果你注册你的插件在前期和同步中运行,你可以通过更新目标输入参数来摆脱很多代码。
public void Execute(IPluginExecutionContext context)
{
if (context.InputParameters.Properties.Contains("Target") &&
context.InputParameters.Properties["Target"] is DynamicEntity)
{
DynamicEntity opp = (DynamicEntity)context.InputParameters["Target"];
opp["salesstagecode"] = new Picklist(200004);
}
}
希望这有帮助!
答案 1 :(得分:1)
您是在前期还是后期注册了这个?