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

我是微软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可以吗?

 

 

顺着这条思路,我用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
}

 

截图如下:

 

 

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

 

 

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

 

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

下面代码是查询哪些实体启用了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);
    }
);

 

posted @ 2019-10-17 00:23  微软MVP(15-18)罗勇  阅读(619)  评论(0编辑  收藏  举报