使用 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;
};
我正在使用我的 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;
};