我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复371或者20191017可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!

Dynamics 365的高级查找是个很好用的功能,某些特殊情况下,有需求要求实体不要在高级查找中出现,可以吗?

通过 MetadataBrowser 可以看到实体有一个属性叫做 IsValidForAdvancedFind ,默认是True,改成False可以吗?

可以设置实体在Dynamics 365高级查找中不显示吗?附通过JS更改实体属性代码_Dynamics 365



顺着这条思路,我用Web API来更改该实体的元数据看下,主要参考官方文档 ​​Create and update entity definitions using the Web API​​ .

我这里利用POSTMAN来调用Web API,方法参考我前面的博文:配置Postman通过​​OAuth 2 implicit grant获取Dynamics 365 CE Online实例的Access Token​​ 。

首先找到要更改实体的 MetadataId,可以通过类似这样的URL来找到。

https://crm867953.api.crm5.dynamics.com/api/data/v9.1/EntityDefinitions?$select=MetadataId&$filter=LogicalName eq 'cr051_testentity'

然后我用POSTMAN发起请求,截图如下:

注意请求的方法是PUT,请求的URL是:https://crm867953.api.crm5.dynamics.com/api/data/v9.1/EntityDefinitions(32398015-4ce4-e911-a996-000d3aa0f3aa) ,请求的内容是JSON格式,我用的是:

{    "IsValidForAdvancedFind":false}


截图如下:

可以设置实体在Dynamics 365高级查找中不显示吗?附通过JS更改实体属性代码_Dynamics 365_02



可以看到发起请求后没有报错,执行成功,返回的HTTP 状态码是204,代表执行成功,没有返回内容。但是再去看该实体的元数据,发现这个属性还是true,没有改过来,实体也还是显示在高级查找中。

可以设置实体在Dynamics 365高级查找中不显示吗?附通过JS更改实体属性代码_Dynamics 365_03



是这种更改实体元数据的方法不好用吗?我用下图来更改另外一个属性- IsQuickCreateEnabled ,执行后是可以更改成功的。

可以设置实体在Dynamics 365高级查找中不显示吗?附通过JS更改实体属性代码_Dynamics 365_04


 若有人知道可以让实体不出现在高级查找中的方法请留言告知我。

下面代码是查询哪些实体启用了Audit。


var clientURL = Xrm.Page.context.getClientUrl();
var req = new XMLHttpRequest()
req.open("GET", encodeURI(clientURL + "/api/data/v9.1/EntityDefinitions?$select=LogicalName,DisplayName&$filter=IsAuditEnabled/Value eq true&$count=true"), true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
if (this.readyState == 4) {
req.onreadystatechange = null;
if (this.status == 200) {
var responseJSON = JSON.parse(this.responseText);
Xrm.Utility.alertDialog("本次查询返回符合条件的记录条数:" + responseJSON["@odata.count"]);
if (responseJSON.value != null && responseJSON.value.length >= 1) {
for (var i = 0; i < responseJSON.value.length; i++) {
console.log(responseJSON.value[i].LogicalName + "," + responseJSON.value[i].DisplayName.UserLocalizedLabel.Label);
}
}
} else {
var error = JSON.parse(this.responseText).error;
Xrm.Utility.alertDialog("查询出错." + error.message);
}
}
};
req.send();



下面代码是更改某实体的Auditing属性为true的代码示例:


var entiyLogicalName = "lvo_msdyn_projecttask_invoice";
var entityMetadataId = "";
var responseJSON = {};
var attributesToChange = [];
var clientURL = Xrm.Utility.getGlobalContext().getClientUrl();
var req = new XMLHttpRequest();
req.open("GET", encodeURI(clientURL + "/api/data/v9.1/EntityDefinitions?$select=MetadataId&$filter=LogicalName eq '" + entiyLogicalName + "'"), false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
if (this.readyState == 4) {
req.onreadystatechange = null; if (this.status == 200) {
responseJSON = JSON.parse(this.responseText);
entityMetadataId = responseJSON.value[0].MetadataId;
}
}
}
req.send();
console.log(entiyLogicalName + ".MetadataId=" + entityMetadataId);
req = new XMLHttpRequest();
req.open("PUT", clientURL + "/api/data/v9.1/EntityDefinitions(" + entityMetadataId + ")", false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
req.onreadystatechange = null;
if (this.status == 204) {
console.log("修改auditing为true修改成功!");
} else {
var error = JSON.parse(this.response).error;
Xrm.Utility.alertDialog("修改出错." + error.message);
}
}
}; var sendData = {
IsAuditEnabled: {
Value: true
}
};
req.send(JSON.stringify(sendData));

console.log(entiyLogicalName + "实体设置Auditing为true完毕,下一步发布本实体!");
var PublishXmlRequest = function (parameterXml) {
this.ParameterXml = parameterXml;
};
PublishXmlRequest.prototype.getMetadata = function () {
return {
boundParameter: null,
parameterTypes: {
"ParameterXml": {
typeName: "Edm.String",
structuralProperty: 1
}
},
operationType: 0,
operationName: "PublishXml",
};
};
var parameterXml = "<publish><entities><entity>" + entiyLogicalName + "</entity></entities></publish>";
var publishXmlRequest = new PublishXmlRequest(parameterXml);
Xrm.WebApi.online.execute(publishXmlRequest).then(function (result) {
if (result.ok) {
console.log("发布实体操作完成! Status: %s %s", result.status, result.statusText);
}
}, function (error) {
console.log(error.message);
}
);