一、应用场景:
在平时的CRM开发中,偶尔需要用到 Entity ObjectTypeCode 来校验 Entity,在这里简单介绍下获取 Entity ObjectTypeCode 的几种手段。
二、获取方式:
a.通过 SQL Server 查询
在 SQL Server 中,我们可以通过EntityView获取ObjectTypeCode,查询语句如下:
SELECT Name,ObjectTypeCode FROM EntityView
b.在 Plugin 中查询
在 Plugin 中,我们可以使用 QueryExpression(不限于使用此方式,也可以使用 Linq 等方式) 从 StringMap 表里获取对应的 Entity Name 以及 ObjectTypeCode,在此不再列出 sample 代码,关于 QueryExpression 的使用可以查看我前面的博客。
c.在 JS 中查询
通常情况下,在 Plugin 能查询到的表,在 JS 中也能查到,但是这次比较特殊的是,CRM Web Resource 中没有提供 StringMap 这个数据集,因此我们只能另寻他路来获取 ObjectTypeCode,这里大概列举一下方法:
1)在CRM Setting 目录下查看 Developer Resource,拿到 API 链接
2)通过以下链接可以获取到所有Entity以及它们的ObjectTypeCode:
http://{IPAddress}/{OrganizationName}/api/data/v9.0/EntityDefinitions?$select=LogicalName,ObjectTypeCode
3)实际上就是从OData拿数据,可以给链接添加查询条件来获取想要的ObjectTypeCode:
http://{IPAddress}/{OrganizationName}/api/data/v9.0/EntityDefinitions?$select=LogicalName,ObjectTypeCode&$filter=LogicalName%20eq%20%27account%27
4)代码示例:
1 var req = new XMLHttpRequest(); 2 req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v9.0/EntityDefinitions?$select=ObjectTypeCode&$filter=LogicalName eq 'account'", false); 3 req.setRequestHeader("OData-MaxVersion", "4.0"); 4 req.setRequestHeader("OData-Version", "4.0"); 5 req.setRequestHeader("Accept", "application/json"); 6 req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 7 req.setRequestHeader("Prefer", "odata.include-annotations=\"*\""); 8 req.onreadystatechange = function () { 9 if (this.readyState === 4) { 10 req.onreadystatechange = null; 11 if (this.status === 200) { 12 var results = JSON.parse(this.response); 13 if (results.value.length > 0) { 14 var entityCode = results.value[0].ObjectTypeCode; 15 } 16 } else { 17 Xrm.Utility.alertDialog(this.statusText); 18 } 19 } 20 }; 21 req.send();
标签:req,setRequestHeader,Entity,获取,ObjectTypeCode,Dynamics,CRM From: https://www.cnblogs.com/Sunny20181123/p/17339781.html