如何在 Dynamics CRM 2016 中禁用基于表单的功能区按钮?

How to disable ribbon button based on Form in Dynamics CRM 2016?

在这种情况下,我有两个带有功能区批准顶部的表单(信息和经理)。此按钮仅 enabled/view 在管理器表单中。

我已经关注了这个tutorial。我已经添加了 javascript 片段,我将其设置为我的功能区按钮启用规则。这是我的代码示例:

function EnableDisableRibbon_ApproveTop() {
    try {
        var formLabel;
        var currForm = Xrm.Page.ui.formSelector.getCurrentItem();
        formLabel = currForm.getLabel();
        
        if (formLabel == "Manager") {
            return true;
        }
        else {
            return false;
        }
    } catch (e) {
        alert("EnableDisableRibbon_ApproveTop : " + e.message);
    }
}

当我打开该表单时出现此错误:

EnableDisableRibbon_ApproveTop : Cannot read property 'getCurrentItem' of null

EnableDisableRibbon_ApproveTop : Cannot read property 'getLabel' of null

1.You 在尝试访问子 properties/methods 之前必须添加空检查,如下所示:

function EnableDisableRibbon_ApproveTop() {
    try {
        var formLabel;
        var selector = Xrm.Page.ui.formSelector;   

        if(selector != null){
            var currForm = selector.getCurrentItem();

            if(currForm != null){
                formLabel = currForm.getLabel();

                if (formLabel == "Manager") {
                    return true;
                }
                else {
                    return false;
                }
            }
        }
    } catch (e) {
        alert("EnableDisableRibbon_ApproveTop : " + e.message);
    }
}

2.Make 确保用户可以通过安全角色访问这两个表单,否则 Xrm.Page.ui.formSelector returns 单个默认表单为空。 read more

3.Check遗留渲染的turbo形式设置,如果能帮助您解决这个错误

4.If 控件延迟加载 - 尝试使用 setTimeout 方法重试代码片段以再次调用 EnableDisableRibbon_ApproveTop() 方法

更新:
您提到的 blogpost 是另一种解决方法,通过从每个表单脚本设置全局 formName 变量而不是 formSelector。这是通过 Enablerule 函数 RibbonButtonEnable.

中的重载 set_formname() 函数完成的