访问javascript ribon /命令栏规则中的Web资源

时间:2016-05-19 19:35:59

标签: javascript dynamics-crm-2011 crm dynamics-crm-2016

我有一个ribon规则来显示或隐藏帐户的停用按钮。

这很简单

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 };

})();

因此,如果用户没有两者中的任何一个角色,则该按钮将被停用。

我的问题是这不是在表单的上下文中运行,因此在表单配置中包含Web资源不起作用。

由于某种原因,我无法弄清楚,从那里,我可以访问jQuery(2.1.1),但没有我的其他资源。

有没有办法在整个系统中包含Web资源,因此可以在此代码中使用,就像jQuery似乎一样?

1 个答案:

答案 0 :(得分:3)

您可以通过使命令看起来像这样包含库:

<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>

注意&#34; isNaN&#34;的值for FunctionName。 isNaN只是一个全局可用的JavaScript函数,如果你没有传递任何参数,它什么都不做。这就是如何使用功能区加载库而不实际调用库中的任何函数。

另请注意,您可以手动编辑命令,也可以使用优秀的Ribbon Workbench等工具。