如何通过记录ID确定实体名称以处理Dynamics 365多态字段
在Dynamics 365 WEB API中处理仅知GUID的多态字段赋值问题
针对仅拥有记录GUID、不知道所属实体类型,需要填充多态字段(如connection实体的record1id)的场景,可按以下方案解决:
一、通过GUID反向匹配所属实体类型
由于你已明确该多态字段的目标实体列表,可通过批量查询或逐个验证的方式,找到该GUID对应的实体:
1. 批量查询优化方案
使用Dynamics WEB API的批量请求,一次性对所有目标实体发起查询,减少网络请求次数:
示例批量请求内容(POST到https://yourorg.crm.dynamics.com/api/data/v9.2/$batch):
Content-Type: multipart/mixed; boundary=batch_12345 --batch_12345 Content-Type: application/http Content-Transfer-Encoding: binary GET api/data/v9.2/accounts(00000000-0000-0000-0000-000000000000)?$select=accountid HTTP/1.1 --batch_12345 Content-Type: application/http Content-Transfer-Encoding: binary GET api/data/v9.2/contacts(00000000-0000-0000-0000-000000000000)?$select=contactid HTTP/1.1 --batch_12345 // 依次添加所有目标实体的查询请求,替换实体逻辑名称和GUID --batch_12345--
返回结果中,状态码为200 OK的请求对应的实体,就是该GUID所属的实体类型。
2. 逐个验证方案
如果批量请求实现复杂,可逐个对目标实体发起GET请求,判断记录是否存在:
GET https://yourorg.crm.dynamics.com/api/data/v9.2/{entity}(your-guid-here)?$select={primary-key-field}
例如查询account:
GET https://yourorg.crm.dynamics.com/api/data/v9.2/accounts(55555555-1111-2222-3333-444444444444)?$select=accountid
若返回200 OK,则该GUID属于account实体;若返回404 Not Found,则继续验证下一个目标实体。
二、获取实体类型后填充多态字段
找到实体类型后,有两种方式填充record1id字段:
1. 直接赋值ID和类型字段
在创建connection记录的POST请求中,直接指定record1id和record1idtype字段:
{ "record1id": "your-guid-here", "record1idtype": "account", // 替换为找到的实体逻辑名称 "record2id": "another-guid-here", "record2idtype": "contact" }
2. 使用导航属性绑定
根据实体类型选择对应的导航属性,通过@odata.bind绑定记录:
{ "record1_account@odata.bind": "/accounts(your-guid-here)", // account实体对应导航属性 "record2_contact@odata.bind": "/contacts(another-guid-here)" // contact实体对应导航属性 }
三、长期优化方案(可选)
如果业务场景中频繁遇到此类需求,可提前维护GUID-实体类型映射表:
- 在生成记录时,同步记录GUID与对应的实体逻辑名称到本地数据库或缓存中
- 后续需要时直接查询映射表,避免每次调用Dynamics API验证实体类型
内容的提问来源于stack exchange,提问作者Taslim Arif
相关产品推荐
相关产品推荐

