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

Javascript 基于条件禁用Dynamics CRM可编辑子栅格中的列,javascript,datagridview,dynamics-crm,editablegrid,Javascript,Datagridview,Dynamics Crm,Editablegrid,基于条件禁用Dynamics CRM可编辑子栅格中的列 我需要在Dynamics CRM 365表单中禁用(使其成为只读)可编辑子网格中的列 在MS doc()中,完成此操作的方法是通过以下方式获取控件: Xrm.Page.getControl("Opportunity_Installments").getGrid().getRows().getAll()[0].getData().entity.attributes.getAll()[0].controls 但问题是控件数组总是空的,所以我不

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

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

在MS doc()中,完成此操作的方法是通过以下方式获取控件:

Xrm.Page.getControl("Opportunity_Installments").getGrid().getRows().getAll()[0].getData().entity.attributes.getAll()[0].controls
但问题是控件数组总是空的,所以我不能禁用列(在控件上应用
setDisable
函数)


在IE控制台中,表达式
Xrm.Page.getControl(“Opportunity_installations”).getGrid().getRows().getAll()[0].getData().entity.attributes.getAll()[0].controls
返回空值。

最重要的事情是
Xrm.Page
已被弃用,您必须开始使用
上下文.getFormContext()

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

出于性能原因,一行(记录)在选择记录之前,可编辑网格中的记录是不可编辑的。用户必须在网格中选择一条记录进行编辑。一旦在可编辑网格中选择了一条记录,Dynamics 365将对一系列内容进行内部评估,包括用户对该记录的访问、该记录是否处于活动状态以及字段验证,以确保数据的安全性和有效性当您编辑数据时,您会感到荣幸。请考虑使用GnFraseCurress方法使用OnReordOrdEnter事件来访问处于可编辑状态的网格中的记录。

解决方法(可用的解决方案)是在
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);
            })
        }
    });
}

您想什么时候禁用字段、加载网格还是禁用记录选择。我的意思是,用户选择记录然后禁用字段非常简单。这对w.r.t可编辑字段更有意义。您能接受/更新我的答案并关闭它吗?