繁体   English   中英

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

[英]Disable column in Dynamics CRM editable subgrid based on a condition

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

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

在 MS 文档( 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 .

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

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

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

参考

解决方法(可用的解决方案)是在OnRowSelect事件上使用以下代码段。

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

阅读更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM