javascript - 在 javascript ribon/command bar 规则中访问 Web 资源

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

我有一个功能区规则来显示或隐藏帐户的“停用”按钮。

非常简单

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/

相关文章:

javascript - Sublime Text 3 - 如何安装 JSHint

c# - 动态 CRM : Get metadata for statuscode/statecode mapping

javascript - 从联系人查找中查看联系人信息

javascript - Dynamics CRM 仪表板 View 和图表

java - 我如何从 BSF 后处理器的脚本代码中做出断言?

javascript - 将饼图名称显示为标题

未找到 C# 反射异常方法

c# - 是否可以通过 API 在 Dynamics CRM 中定义具有属性的新实体类型?

javascript - Dynamics CRM 使用 Javascript/HTML Web 资源创建记录时遇到问题

javascript - 我怎样才能使这个 div 使用 jQuery 从顶部向下滑动?