CRM2015 Form,subgrid設定為disabled
阿新 • • 發佈:2019-01-30
今天遇到了一個需求:在狀態描述欄位為特定值時 需要將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);
}
}