如何通过Dynamics OData Web API同时查询Account或Contact
Dynamics 365 Cloud CE OData Web API 实现单次查询关联客户需求
可行,且可以通过单次请求实现跨Contact和Account实体的查询,无需分两次请求。具体实现方式如下:
核心方案:使用FetchXML联合查询
Dynamics 365 Web API支持通过FetchXML的union元素合并多个实体的查询结果,可同时查询Contact和Account中匹配指定ssn的记录,后续在返回结果中优先取Contact记录(无匹配则取Account)。
步骤1:构造FetchXML查询语句
构造包含union的FetchXML,同时筛选Contact和Account实体,指定返回ID和筛选条件:
<fetch mapping='logical' distinct='false'> <union all='true'> <entity name='contact'> <attribute name='contactid' /> <attribute name='ssn' /> <filter type='and'> <condition attribute='ssn' operator='eq' value='SE190001010101' /> </filter> </entity> <entity name='account'> <attribute name='accountid' /> <attribute name='ssn' /> <filter type='and'> <condition attribute='ssn' operator='eq' value='SE190001010101' /> </filter> </entity> </union> </fetch>
步骤2:发起Web API请求
通过POST请求调用FetchXML端点,请求参数如下:
- 请求URL:
https://[你的组织域名].dynamics.com/api/data/v9.1/fetchXml - 请求头:
Content-Type: application/xml - 请求体:上述构造的FetchXML内容
步骤3:处理返回结果
返回的JSON数据中,每条记录会包含@odata.type字段,标识实体类型:
- Contact记录的类型为
Microsoft.Dynamics.CRM.contact - Account记录的类型为
Microsoft.Dynamics.CRM.account
处理逻辑:优先提取类型为Contact的记录;若无Contact匹配结果,则提取Account的记录。
内容的提问来源于stack exchange,提问作者Per
相关产品推荐
相关产品推荐

