Dynamics CRM記錄頁面上隱藏子網格“+”標識


前段時間微軟發布了Dynamics 365,這是Dynamics產品的又一次大的變動,期待新的版本能夠更好的滿足客戶的需求,同時提供更多的可定制化的內容。

 

近期做Dynamics CRM項目遇到很多審批的業務,用戶A提交審批給用戶B,這時如果審批記錄沒有做分派即審批記錄的負責人沒有發生改變,通常情況下都會把審批記錄對申請人不可編輯。

常見的做法是:依據記錄的審批狀態,在記錄頁面加載時使用JS方法,遍歷停用頁面上的所有控件。

但會遇到一個問題,子網格是無法停用的,子網格右上角的”+”仍然可以點擊,仍然可以在子網格中直接刪除關聯記錄,該如何處理呢?

 

我接觸到處理方法:

1、  在頁面加載完成后,使用JS方法隱藏”+”對應的div。(這不是官方支持的方法,而且如果系統升級,隨時可能失效)。

2、  對子網格實體添加插件,當用戶編輯子網格數據的時候,通過插件去做檢驗,拋異常告訴用戶該子網格不可編輯。(這種方式用戶體驗度不是很好,並且增加了開發人員的工作量)。

 

下邊我以報銷申請為例介紹一種官方支持的方式:

 

實現思路:

為 ”+” 按鈕添加JS可用規則,當審批條件不是草稿時不顯示。

 

首先,我們先看下申請頁面處理后的效果,圖中 報銷申請:案例 = 1:N

 

具體的操作:

 

1、  在報銷頁面上添加“審批狀態”字段。

 

2、  使用Ribbon Workbench 為 案例 實體的新建、刪除、編輯等按鈕添加可用規則。

 

 

 

配置好腳本及腳本方法HideSunGridBtn.subGridBtnEnRule

 

 

 

為各按鈕添加可用規則

 

 

 

 

最后,發布解決方案。

 

 

JS代碼:

 

var FORM_TYPE_CREATE = 1;

var FORM_TYPE_UPDATE = 2;

 

var HideSunGridBtn = (function () {

    return {

        //頁面的onload方法

        onload: function () {

            //審批狀態

            var statusValue = Xrm.Page.getAttribute("new_status").getValue();

            //不是草稿狀態時停用所有控件

            if (statusValue != 1) {

                HideSunGridBtn.DisableFormFields();

            }

 

        },

 

        //停用子網格上的“+”和刪除功能

        subGridBtnEnRule: function () {

            var statusValue = Xrm.Page.getAttribute("new_status").getValue();

            var statecode = Xrm.Page.getAttribute("statecode").getValue();

            var formType = Xrm.Page.ui.getFormType();

            //審批狀態=草稿 狀態=可用  窗體類型=2

            if (statusValue == 1 && statecode == 0 && formType == FORM_TYPE_UPDATE) {

                return true;

            }

            return false;

        },

 

        //停用頁面上的所有控件

        DisableFormFields: function () {

            Xrm.Page.ui.controls.forEach(function (control, index) {

                if (HideSunGridBtn.DoesControlHaveAttribute(control)) {

                    control.setDisabled(true);

                }

            });

        },

 

        DoesControlHaveAttribute: function (control) {

            var controlType = control.getControlType();

            return controlType != "iframe" && controlType != "webresource" && controlType != "subgrid";

        }

    };

})();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM