根据条件禁用 Dynamics CRM 可编辑子网格中的列

问题描述 投票:0回答:1

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

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

在 MS doc (https://learn.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。

javascript datagridview dynamics-crm editablegrid
1个回答
2
投票

最重要的事情

Xrm.Page
已弃用,您必须开始使用
context.getFormContext()

不幸的是,可编辑网格控件和内部事物在表单加载时并未完全呈现,我们必须依赖

OnRecordSelect
事件。

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

参考

解决方法(可用解决方案)是在

OnRecordSelect
事件上使用以下代码片段。

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

了解更多

© www.soinside.com 2019 - 2024. All rights reserved.