无法仅在实体的一个窗体上显示自定义功能区按钮
Unable to display custom ribbon button only on one form of an entity
我在CRM 2013中的机会实体上创建了一个功能区按钮,并使用自定义启用规则仅在两个可用表单(admin、sales)中的一个表单上显示该按钮。
我能够在正确的表单(admin)上看到web上的按钮,但它似乎在Outlook客户端上不可见。我使用以下JavaScript来启用/禁用按钮,由于某种原因,当从Outlook调用时,JS总是返回false。
我正在使用SetTimeout,因为Outlook似乎需要时间来获取对象,如果不使用则抛出错误。
是否有更好的方法在一个表单上启用按钮而不是另一个表单?
function EnableRibbonButton()
{
var client = Xrm.Page.context.client.getClient();
if(client == "Web")
{
var form = Xrm.Page.ui.formSelector;
if(form != null)
{
var formItem = form.getCurrentItem();
if(formItem != null)
{
var formId = formItem.getId();
if(formId == "ADMINFORMGUID")
{
return true;
}
else
{
return false;
}
}
}
}
else if(client == "Outlook")
{
var form = getForms();
var formItem = getFormItem(form);
var formId = getFormID(formItem);
if(formId == "ADMINFORMGUID")
{
return true;
}
else
{
return false;
}
}
}
function getForms()
{
var form = Xrm.Page.ui.formSelector;
if(form != null)
{
return form;
}
else
{
window.setTimeout("getForms()", 100);
}
}
function getFormItem(form)
{
var formItem = form.getCurrentItem();
if(formItem != null)
{
return formItem;
}
else
{
window.setTimeout("getFormItem("+form+")", 100);
}
}
function getFormID(formItem)
{
var formId = formItem.getId();
if(formId != null)
{
return formId;
}
else
{
window.setTimeout("getFormID("+formItem+")", 100);
}
}
setTimeout
立即返回(timeoutID),并将在稍后的时间执行第一个参数,因此您需要某种回调机制来继续下一步。
此外,给setTimeout
一个字符串作为第一个参数是一种"隐式eval"的形式,这通常是不可取的。
getForm
带回调示例:
function getFormSelector(callback) {
var formSelector = Xrm.Page.ui.formSelector;
if(typeof callback === 'function') {
if(!formSelector) {
window.setTimeout(
// Create closure for callback function.
function() {
getFormSelector(callback);
},
100 // milliseconds
);
return;
}
callback(formSelector);
return;
}
return formSelector;
}
相关文章:
- 仅为一个窗体运行应用程序脚本
- 在一个窗体中处理具有相同名称和值的多个按钮
- Createjs DomElement创建一个窗体
- 禁用基于rails中另一个字段的字段窗体
- CRM-从另一个窗体检索选定的选项集
- Asp.Net 将多个窗体添加到一个窗体时,用户控件无法正常工作
- 未捕获的类型错误: $(..).文档窗体不是一个函数
- 如何在一个窗体上创建子网格并将其值传递给另一个窗体中的查找
- 制作另一个窗体,该窗体将显示列表(自动完成)并将用作所选字段的值
- 使用 jQuery 在窗体中选择一个父项,然后选择子项
- 启用最后一个 JS 函数时动态下拉窗体中断
- 仅执行的第一个函数-由两个窗体的.osubmit调用的两个函数中的一个
- 窗体-通过在select标记中选择一个选项来显示隐藏字段
- 常规按钮和提交按钮在一个窗体don'不起作用
- 两个按钮一个窗体
- 用另一个下拉列表替换窗体上的下拉列表
- 如何禁用多部分窗体上的下一个按钮
- 当另一个窗体有焦点时,禁用其中一个窗体
- 在依赖于另一个字段选择的窗体中隐藏表的某个部分
- 创建一个angular指令来改变窗体的占位符文本