如何通过Web API获取CRM365活动实体Regarding字段的查找类型
哥们,我刚好碰到过这个问题,给你两个靠谱的解决办法,都能拿到regarding字段指向的实体类型:
方法1:直接查询扩展属性
Dynamics 365 Web API为查找字段提供了一个特殊的扩展属性,用来存储关联实体的逻辑名称,格式是[查找字段值属性名]@Microsoft.Dynamics.CRM.lookuplogicalname。对你的场景来说,就是_regardingobjectid_value@Microsoft.Dynamics.CRM.lookuplogicalname。
你可以直接在请求的$select参数里指定这个属性,不需要额外的展开操作。比如修改你的请求URL:
http://<crmurl>/api/data/v8.2/activitypointers(7F0FA8DE-D818-E911-80BE-00155D14191A)?$select=_regardingobjectid_value,_regardingobjectid_value@Microsoft.Dynamics.CRM.lookuplogicalname
返回的结果里会包含这个字段,值就是关联实体的逻辑名称(比如account、contact或者opportunity这类)。
注:你之前用$select=*没拿到这个字段,是因为Web API默认不会把这类扩展属性包含在*的返回结果里,必须明确指定才行。
方法2:展开关联实体获取类型
另一种方式是通过$expand参数展开regardingobjectid关联,然后从展开的实体对象里读取@odata.type属性。
修改后的请求URL示例:
http://<crmurl>/api/data/v8.2/activitypointers(7F0FA8DE-D818-E911-80BE-00155D14191A)?$select=subject&$expand=regardingobjectid
返回结果里的regardingobjectid对象会包含@odata.type字段,值格式类似#Microsoft.Dynamics.CRM.account,你只需要截取#Microsoft.Dynamics.CRM.后面的部分,就是实体的逻辑名称了。
这个方法的好处是,如果需要同时获取关联实体的其他字段,一次请求就能搞定,不用再单独调用接口。
内容的提问来源于stack exchange,提问作者Marek Přikryl

