1

在这种情况下,我有两个带有功能区 Approve TOP 的表格(信息和管理器)。此按钮仅在管理器表单中启用/查看。

我已按照本教程进行操作。我已经添加了我设置到我的功能区按钮启用规则的 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:无法读取 null 的属性“getCurrentItem”

EnableDisableRibbon_ApproveTop:无法读取 null 的属性“getLabel”

4

1 回答 1

1

1.在尝试访问子属性/方法之前,您必须添加空检查,如下所示:

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.确保用户可以通过安全角色访问这两个表单,否则Xrm.Page.ui.formSelector为单个默认表单返回 null。阅读更多

3.检查旧版渲染的涡轮表单设置,如果它可以帮助您解决此错误

4.如果控件延迟加载 - 尝试setTimeout方法重试片段以再次调用该EnableDisableRibbon_ApproveTop()方法

更新:您提到
文是另一种解决方法,通过从每个表单脚本设置全局formName变量而不是formSelector. 这是通过set_formname()Enablerule 函数中的重载函数完成的RibbonButtonEnable

于 2018-01-17T21:01:05.723 回答