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

Javascript 如何在Dynamics CRM 2016中禁用基于表单的功能区按钮?,javascript,dynamics-crm,dynamics-crm-2016,ribbon-button,Javascript,Dynamics Crm,Dynamics Crm 2016,Ribbon Button,在本例中,我有两个表单(信息和管理器)顶部带有ribbon Approve。此按钮仅在管理器窗体中启用/查看 我已经注意到了这一点。我已经在功能区按钮启用规则中添加了javascript代码段。这是我的代码示例: function EnableDisableRibbon_ApproveTop() { try { var formLabel; var currForm = Xrm.Page.ui.formSelector.getCurrentItem();

在本例中,我有两个表单(信息和管理器)顶部带有ribbon Approve。此按钮仅在管理器窗体中启用/查看

我已经注意到了这一点。我已经在功能区按钮启用规则中添加了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”


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.如果有助于解决此错误,请检查旧式渲染的turbo form设置

4.如果控件加载延迟-请尝试
setTimeout
方法重试代码段,以再次调用
enabledisablebribbon\u ApproveTop()
方法

更新:

您提到的是另一种解决方法,通过从每个表单脚本设置全局
formName
变量,而不是
formSelector
。这是通过重载的
set\u formname()
函数内部的Enablerule函数
RibbonButtonEnable

实现的,为什么我仍然得到空值?2016年迪纳米克crm可能存在一些问题?我试过dinamic crm 365,效果不错perfectly@aminvincent你试过调试吗?是的,我试过。。我的功能区按钮仍然出现问题是功能区无法读取null的属性“getCurrentItem”。但是当我尝试从表单调用js时,我会加载它work@aminvincent没错,到第4点时,请使用setTimeout在一秒钟后重试,并查看它是否为null。。