[英]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.