使用 JavaScript 获取 CRM 主题颜色

Geting CRM theme color using JavaScript

我正在使用我的 CRM 解决方案,包括一些 JS Web 资源,它应该在帐户实体上添加新按钮(它们被放置在表单主体中)。我还制作了一个新的 CRM 主题。

是否有任何 JavaScript 函数可以从该主题中获取颜色,以便我可以将其用于我的按钮?

当我从主题中获取的颜色发生变化时自动更改按钮颜色的目标,无需更改我的代码。

您可以使用 CRM REST Builder 创建以下代码,这将 return 默认(即正在使用的)主题:

var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.0/themes?$filter=isdefaulttheme eq true", true);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("Prefer", "odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\"");
req.onreadystatechange = function () {
    if (this.readyState === 4) {
        req.onreadystatechange = null;
        if (this.status === 200) {
            var results = JSON.parse(this.response);
            for (var i = 0; i < results.value.length; i++) {
                 var themeid = results.value[i]["themeid"];
            }
        }
        else {
            alert(this.statusText);
        }
    }
};
req.send();

您还可以通过以下方式使用 WebAPI URL:

http(s)://SERVER/ORG/api/data/v8.0/themes?$filter=isdefaulttheme eq true

主题信息存储在后台一个名为"Theme"的实体中。该实体包含不同 UI 元素的所有十六进制代码。您可以使用 SDK/JavaScript 查询此实体并获取有关特定元素的信息。

使用 REST:http://contoso.com/api/data/v8.0/themes

并读取十六进制代码:"controlborder":"#000000","controlshade":"#000000"

谢谢大家的回答。它帮助我找到了解决这个问题的方法。

与此同时,我找到了另一种使用 XRM Service Toolkit 从主题获取颜色的方法(您必须安装 XRMServiceToolkit 才能使用此解决方案。Here 是如何操作的说明。 它有效,我想与您分享以防有人发现它有用。

我还想声明我是 CRM 的新手,所以如果有理由不使用此功能,或者有改进方法,我将很高兴收到有关的反馈。

这是我做的功能。我用它来检索全局 Link 颜色,但你可以获得任何你想要的颜色:

 function getColorFromTheme()
 {
    var color ;

    XrmServiceToolkit.Rest.RetrieveMultiple(
                "ThemeSet",
                "",
                function (results) {
                    if (results.length >= 1)
                        for (var i = 0; i < results.length; i++) {
                            if(results[i].IsDefaultTheme===true)
                            color=results[i].GlobalLinkColor;
                        }
                },
                function (error) {
                    alert(error.message);
                },
                function onComplete() {

                },
                false
            );

    return color; 
 };