【发布时间】:2016-09-19 16:40:23
【问题描述】:
我正在使用我的 CRM 解决方案,包括一些 JS Web 资源,它应该在帐户实体上添加新按钮(它们被放置在表单正文中)。我还制作了一个新的 CRM 主题。
是否有任何 JavaScript 函数可以从该主题中获取颜色,以便我可以将它用于我的按钮?
目标是在我从主题中获得的颜色发生更改时自动更改按钮颜色,而无需更改我的代码。
【问题讨论】:
标签: javascript dynamics-crm crm
我正在使用我的 CRM 解决方案,包括一些 JS Web 资源,它应该在帐户实体上添加新按钮(它们被放置在表单正文中)。我还制作了一个新的 CRM 主题。
是否有任何 JavaScript 函数可以从该主题中获取颜色,以便我可以将它用于我的按钮?
目标是在我从主题中获得的颜色发生更改时自动更改按钮颜色,而无需更改我的代码。
【问题讨论】:
标签: javascript dynamics-crm crm
您可以使用CRM REST Builder 创建以下代码,该代码将返回默认(即正在使用)主题:
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();
您还可以通过以下 URL 使用 WebAPI:
http(s)://SERVER/ORG/api/data/v8.0/themes?$filter=isdefaulttheme eq true
【讨论】:
主题信息存储在后台一个名为“主题”的实体中。该实体包含不同 UI 元素的所有十六进制代码。您可以使用 SDK/JavaScript 查询此实体并获取有关特定元素的信息。
使用 REST:http://contoso.com/api/data/v8.0/themes
并读取十六进制代码:"controlborder":"#000000","controlshade":"#000000"
【讨论】:
谢谢大家的回答。它帮助我找到了解决这个问题的方法。
与此同时,我已经建立了另一种使用 XRM Service Toolkit 从 Theme 获取颜色的方法(您必须安装 XRMServiceToolkit 才能使用此解决方案。Here 是如何执行此操作的说明。 它有效,我想与你分享它以防有人发现它有用。
我还想声明我是 CRM 新手,所以如果有理由不使用此功能,或者有办法改进它,我将很高兴收到有关此功能的反馈。
这是我制作的功能。我用它来检索全局链接颜色,但你可以得到任何你想要的颜色:
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;
};
【讨论】: