CRM 4.0选择列表值通过工作流程更新,但旧值仍显示在表单上直到刷新

时间:2010-03-30 14:58:15

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

我为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的错误 - 当然表单应该显示更新的值而不必关闭并重新打开表单。但除此之外,有什么我可以做的,以便用户不必这样做才能看到更新的值而不是旧值?

2 个答案:

答案 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)

您是在前期还是后期注册了这个?