0

我有一个 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 似乎一样?

4

1 回答 1

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>

请注意 FunctionName 的“isNaN”值。isNaN 只是一个全局可用的 JavaScript 函数,如果你不向它传递任何参数,它什么也不做。这就是让功能区加载库而不实际调用库中任何函数的方式。

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

于 2016-05-19T20:09:19.440 回答