能否通过OData获取MS CRM Online中关联联系人数量超X的账户?
如何用OData获取MS CRM Online中关联联系人数量超X的账户
当然可以实现这个需求!你说得没错,FetchXML确实没法直接在服务端完成聚合后的过滤操作,但OData Web API(也就是CRM的OData v4端点)的$apply操作符正好能搞定这类场景,而且是在服务端完成计算和过滤,效率比拉取所有数据到客户端再处理高得多。
你的伪代码方向完全正确,只需要调整下语法细节就能运行了。正确的OData查询写法应该是这样的:
accounts?$apply=aggregate(contact_customer_accounts/$count as totalContacts)/filter(totalContacts gt X)
举个实际例子,如果你要找关联联系人超过5个的账户,把X换成5就行:
https://yourorg.crm.dynamics.com/api/data/v9.2/accounts?$apply=aggregate(contact_customer_accounts/$count as totalContacts)/filter(totalContacts gt 5)
这里有几个关键点需要注意:
- 必须使用CRM的Web API端点(比如
https://yourorg.crm.dynamics.com/api/data/v9.2/),旧的OData v2端点(/XRMServices/2011/OrganizationData.svc/)不支持$apply和聚合操作,这点一定要区分开。 - 导航属性名称要和你的CRM组织实际一致:默认情况下,账户到联系人的关联导航属性是
contact_customer_accounts,但如果你的组织有自定义修改过实体关系,记得先确认正确的属性名称(可以通过Web API的元数据文档查看)。 - 权限要到位:调用这个接口的用户必须同时拥有账户和联系人实体的读取权限,否则会返回权限不足的错误。
- 大数据量场景:如果你的账户数量特别多,建议配合
$top和$skip进行分页查询,避免单次返回结果过多导致超时或者性能问题。
另外补充一句:虽然FetchXML可以做聚合统计,但它没法直接过滤聚合后的结果(比如筛选计数大于X的记录),所以用OData的$apply是目前最直接的服务端解决方案。
内容的提问来源于stack exchange,提问作者Eichi
相关产品推荐
相关产品推荐

