Javascript 如何在Dynamics CRM 2016中禁用基于表单的功能区按钮?
在本例中,我有两个表单(信息和管理器)顶部带有ribbon Approve。此按钮仅在管理器窗体中启用/查看 我已经注意到了这一点。我已经在功能区按钮启用规则中添加了javascript代码段。这是我的代码示例: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();
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。。