【问题标题】:Disable column in Dynamics CRM editable subgrid based on a condition根据条件禁用 Dynamics CRM 可编辑子网格中的列
【发布时间】:2019-08-28 07:42:54
【问题描述】:

Dynamics CRM 中禁用列基于条件的可编辑子网格

我需要禁用(设为只读)Dynamics CRM 365 表单中可编辑子网格中的列。

在 MS doc (https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/developers-guide/mt788311(v=crm.8),完成此操作的方法是通过以下方式获取控件:

Xrm.Page.getControl("Opportunity_Installments").getGrid().getRows().getAll()[0].getData().entity.attributes.getAll()[0].controls

但问题是控件数组始终为空,因此我无法禁用该列(在控件上应用setDisable 函数)

在 IE 控制台中,表达式 Xrm.Page.getControl("Opportunity_Installments").getGrid().getRows().getAll()[0].getData().entity.attributes.getAll()[0].controls 返回 null。

【问题讨论】:

  • 您何时要禁用字段、网格的 OnLoad 或 RecordSelect。我的意思是当用户选择记录然后禁用字段时很容易。这更有意义 w.r.t 可编辑字段。

标签: javascript datagridview dynamics-crm editablegrid


【解决方案1】:

最重要的一点Xrm.Page 已弃用,您必须开始使用context.getFormContext()

不幸的是,可编辑的网格控件和内部的东西并没有完全在表单加载时呈现,我们不得不依赖OnRowSelectevent。

出于性能原因,可编辑网格中的行(记录)在选择记录之前不可编辑。用户必须在网格中选择一条记录才能对其进行编辑。在可编辑网格中选择记录后,Dynamics 365 会在内部评估一系列内容,包括用户对记录的访问权限、记录是否处于活动状态以及字段验证,以确保在您编辑数据时遵守数据安全性和有效性。考虑使用带有 getFormContext 方法的 OnRecordSelect 事件来访问网格中处于可编辑状态的记录。

Reference

解决方法(可用的解决方案)是在OnRowSelect 事件上使用下面的 sn-p。

function gridRowSelected(context) {
    context.getFormContext().getData().getEntity().attributes.forEach(function (attr) {
        if (attr.getName() === "new_fieldname") {
            attr.controls.forEach(function (c) {
                c.setDisabled(true);
            })
        }
    });
}

Read more

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多