簡體   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