Dynamics CRM - 如何获取 Entity 的 ObjectTypeCode

发布时间 2023-04-21 11:31:42作者: 刻師傅,來碗牛雜

一、应用场景:

      在平时的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();