【问题标题】:CRM 4.0 Picklist Value is updated via workflow, but old value still shows on form until refreshCRM 4.0 选项列表值通过工作流更新,但旧值仍显示在表单上,​​直到刷新
【发布时间】:2010-03-30 14:58:15
【问题描述】:

我为 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 的错误 - 表单肯定应该显示更新的值,而无需关闭并重新打开表单。但除此之外,我能做些什么来适应,这样用户就不必这样做来查看更新的值而不是旧的值?

【问题讨论】:

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


    【解决方案1】:

    无论您是在 pre-stage 还是 post-stage 注册它,都应该在表单重新加载时反映出来。唯一会延迟更新的是,如果您将插件注册为异步运行,在这种情况下,它会在后台异步服务中运行。

    您将插件步骤注册为哪种模式? (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);
        }
    }
    

    希望这会有所帮助!

    【讨论】:

    • 谢谢科里。我正在同步运行这个,注册前阶段。我已经合并了你建议的代码,它仍然有同样的问题。该值已更新,但重新加载的表单未显示此内容。仅当第二次手动刷新表单 (F5) 或关闭然后重新打开表单时,才会显示新值
    • 我想知道我是否可以通过SDK强制刷新?如果没有其他方法,这可能是一个足够的解决方法
    • 这里肯定有些奇怪。这就是我们每天都在做的事情。只是为了确保我的步骤正确,您:打开 opp 表单,修改一些值,单击保存,然后表单返回而您的插件更改不显示?
    • 关闭。打开 opp 表单,运行重新打开机会的自定义工作流。它检查正在重新打开的 opp 上的 salesstagecode 选项列表的名称和值,如果将其设置为 200004(“Win / Closed (100%)”),则将其值更改为 200003(“Final Stages (90%)”) .除非用户按 F5 重新加载表单,否则表单会在选项列表中显示旧值。无论步骤是在前阶段还是后阶段注册,这都是行为。
    • 看看这个,它看起来可能就是答案。但是您知道我将如何注册此代码吗?我只编辑过一次 ISV 文件,以便向执行工作流的实体表单添加一个按钮,但我不确定如何实现这个 a33ik.blogspot.com/2009/05/page-refresh.html
    【解决方案2】:

    你是在前期还是后期注册的?

    【讨论】:

    • 这是在post阶段注册的
    • 尝试在 Pre-stage 上运行它。通常针对帖子运行插件会使表单刷新,但我不确定如何处理重新打开机会的情况。我想在发布事件被触发之前,主 opp 表单会被刷新。
    • 在你最初的问题之后,我确实尝试了这个。不幸的是,它并没有解决问题。
    • 我会向 Microsoft 提交支持请求,因为这听起来有些奇怪。
    • 看看这个,它看起来可能就是答案。但是您知道我将如何注册此代码吗?我只编辑过一次 ISV 文件,以便向执行工作流的实体表单添加一个按钮,但我不确定如何实现这个 a33ik.blogspot.com/2009/05/page-refresh.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多