我有一个功能区规则来显示或隐藏帐户的“停用”按钮。
非常简单
if (typeof (XTC) == "undefined")
{ XTC= { __namespace: true }; }
XTC.RibbonRules = (function () {
AccountRules = {
//see if user has roles specified to have the Deactivate button enabled.
IsDeactivateEnabled: function () {
var orgName = Xrm.Page.context.getOrgUniqueName();
var validGuids;
var allowedRoles = [];
/*
put all roles needed to show Account Deactivate button here.
*/
allowedRoles.push('System Administrator');
allowedRoles.push('XTC Admin');
var userRoles = Xrm.Page.context.getUserRoles();
//user has no assigned roles...
if (userRoles.length < 1)
return false;
var matchingRoles = AccountRules.returnMatchingRoles(userRoles);
for (var x = 0; x < matchingRoles.length; x++) {
if ($.inArray(matchingRoles[x].Name, allowedRoles) != -1)
return true;
}
return false;
},
returnMatchingRoles: function (roles) {
var matches;
var serverUrl = location.protocol + '//' + location.host + '/' + Xrm.Page.context.getOrgUniqueName();
var queryUrl = serverUrl + '/XRMServices/2011/OrganizationData.svc/' + 'RoleSet?$filter=';
for (var x = 0; x < roles.length; x++) {
if (x == roles.length - 1) {
queryUrl += "RoleId eq guid'" + roles[x] + "'";
}
else {
queryUrl += "RoleId eq guid'" + roles[x] + "' or ";
}
}
$.ajax({
url: queryUrl,
type: "GET",
async: false,
contentType: "application/json; charset=utf-8",
datatype: "json",
beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); },
success: function (data, textStatus, XmlHttpRequest) {
matches = data.d;
},
error: function (XmlHttpRequest, textStatus, errorThrown) {
alert('OData Select Failed: ' + textStatus + errorThrown + odataSelect);
}
});
return (matches.results.length > 0) ? matches.results : null;
}
};
return { AccountRules: AccountRules };
})();
因此,如果用户不具有这两个 Angular 色中的任何一个,则该按钮将被停用。
我的问题是,这不是在表单上下文中运行,因此在表单配置中包含 Web 资源不起作用。
出于某种原因,我无法弄清楚,从那里,我可以访问 jQuery (2.1.1),但无法访问其他资源。
是否有一种方法可以在系统范围内包含 Web 资源,以便在这段代码中可用,就像 jQuery 那样?
最佳答案
您可以通过使命令如下所示来包含库:
<CommandDefinition Id="new.incident.Home.ValidateAndResolve.Command">
<EnableRules>
<EnableRule Id="Mscrm.SelectionCountAtLeastOne" />
</EnableRules>
<DisplayRules />
<Actions>
<JavaScriptFunction FunctionName="isNaN" Library="$webresource:xyz_/Scripts/Common/helpers.js" />
<JavaScriptFunction FunctionName="incidentribbon.validateAndResolve" Library="$webresource:xyz_/Scripts/Ribbon/incident.js" />
</Actions>
</CommandDefinition>
注意 FunctionName 的值“isNaN”。 isNaN 只是一个全局可用的 JavaScript 函数,如果您不向其传递任何参数,则该函数不会执行任何操作。这就是如何让功能区加载您的库,而无需实际调用库中的任何函数。
另请注意,您可以手动编辑命令或使用优秀的 Ribbon Workbench 等工具。
关于javascript - 在 javascript ribon/command bar 规则中访问 Web 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37332534/