1. 程式人生 > >CRM2015 Form,subgrid設定為disabled

CRM2015 Form,subgrid設定為disabled

今天遇到了一個需求:在狀態描述欄位為特定值時 需要將Form設定為disabled.
查了一下sdk發現沒有這個功能。
bing了一下找打了一個可以直接使用的程式碼。

因為subgrid控制元件不能直接disabled掉(CRM2011可以)。
所以想了一個折中辦法,將subgrid上方的【+】與 【顯示詳細】按鈕給隱藏掉。
但是對於subgrid中每行右側的【刪除】按鈕並沒有隱藏掉,考慮到實際使用者使用中不會被分配刪除許可權。
對於ribbon直接設定ribbon規則即可。
程式碼如下:

///<summary>
//當【工單】實體中的【狀態描述】欄位的值不為
//【100000005 駁回】、【100000000 草稿】時需要將表單中所有欄位設定為Disabled
///</summary> PetroCRM.Main.Equip.Serviceworkorder.SetFormDisabled = function () { //取得【狀態描述】的值 var statuscode = Xrm.Page.getAttribute("statuscode").getValue(); // 狀態描述為【100000005 駁回】、【100000000 草稿】時直接退出 if (100000005 == statuscode || 100000000 == statuscode) { return; } makeReadOnly(); } var intervalId; function
makeReadOnly() {
try { var subgridsLoaded = false; Xrm.Page.ui.controls.get().forEach(function (control, index) { // formtype=3 readonly if (control.setDisabled && Xrm.Page.ui.getFormType() != 3) { control.setDisabled(true); } else
{ removeAddButtonFromSubGrid(control); subgridsLoaded = true; } }); if ($("div[id$='_crmGridTD']").length > 0 && !subgridsLoaded) { intervalId = setInterval(function () { var subgridsArr = Xrm.Page.getControl(function (control, index) { return control.getControlType() == 'subgrid'; }); subgridsArr.forEach(function (control, index) { removeButtonsFromSubGrid(control); }); }, 500); } } catch (e) { alert("makeReadOnly() Error: " + e.message); } } function removeButtonsFromSubGrid(subgridControl) { if (intervalId) { var addIamgeButton = $('#' + subgridControl.getName() + '_addImageButton'); if (addIamgeButton != null && addIamgeButton != undefined) { addIamgeButton.css('display', 'none'); } var associatedGridView = $('#' + subgridControl.getName() + '_openAssociatedGridViewImageButton'); if (associatedGridView != null && associatedGridView != undefined) { associatedGridView.css('display', 'none'); } clearInterval(intervalId); } }