【问题标题】:How to configure auto update of view/form/dashboard on entity change via CRM SDK如何通过 CRM SDK 在实体更改时配置视图/表单/仪表板的自动更新
【发布时间】:2015-12-15 13:50:45
【问题描述】:

目前,我们有以下情况: Account 实体包含 online_status 字段,该字段可以具有 offline 或 online 值。我们有一个实体视图,它只显示在线帐户。

案例1:

  • 我打开视图。暂时是空的;
  • 我在另一个窗口中打开了一个帐户表单,并手动将在线状态从offline 更改为online;
  • 点击save后,视图中的网格会自动更新并开始显示此帐户

案例2:

我使用 SDK 更改在线状态:

using (var proxy = CreateCrmProxy(broker))
{
    proxy.EnableProxyTypes();
    var crmAccount = proxy.Retrieve(Account.EntityLogicalName, aggregateId, new ColumnSet()) as Account; 

    crmAccount.OnlineStatus = //new online status;
    proxy.Update(crmAccount);
}

CreateCrmProxy 方法创建OrganizationServiceProxy 类的实例。

在这种情况下,online_status 字段更新成功,但视图中的网格保持旧状态,我需要按“刷新”按钮才能看到有效信息。

是否可以使用 case2 中的技术触发视图自动更新?

提前致谢!

【问题讨论】:

    标签: c# sdk dynamics-crm crm dynamics-crm-2013


    【解决方案1】:

    不,你不能用插件来做到这一点,因为插件纯粹是后端,而子网格是前端 UI 结构。进行更新后,您可能可以通过调用 RetrieveMultiple 来做一些骇人听闻的事情,但是没有任何方法可以强制视图自行更新。

    在您的情况下,更好的选择是通过 javascript 触发更改(REST 或 SOAP 调用就足够了),这样一旦更新完成,您就可以调用 control.refresh。在仪表板上会有点棘手,因为您没有用于加载 javascript 的表单,并且视图将位于不同的窗格中,但您可以使用 Web 资源执行某些操作并使用父上下文。

    【讨论】:

    • 但是当我在 CRM 页面更新在线状态时,CRM 子网格被刷新。它是如何发生的?据我了解,CRM 中的一些事件被触发,并且 subgrid 订阅了这些事件。还是有其他机制?我不能用吗?
    • 当您更新 crm 页面(从子网格)上的记录时发生的 CRM“事件”是调用了重新加载网格的页面端 javascript 函数。重新加载网格会重新调用 RetrieveMultiple 消息。您可以针对某些 crm 服务器端事件注册插件,但同样 - 子网格不会以您描述的方式与这些事件挂钩。他们利用 RetrieveMultiple SDK 操作来获取所有相关记录,但是没有办法将此检索多个操作推送到子网格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多