计算Dynamics CRM Online Web API(ODATA)中的所有行

时间:2018-07-26 16:44:36

标签: odata dynamics-crm dynamics-crm-online dynamics-crm-365 dynamics-crm-webapi

是否可以对给定实体中的所有行进行计数,从而绕过5000行限制和页面大小限制?

我不想在一个请求中返回超过5000行,而只想要该给定实体中所有行的计数。

根据Microsoft,您不能在请求URI中进行此操作:

The count value does not represent the total number of entities in the system. 

It is limited by the maximum number of entities that can be returned.

我已经尝试过:

GET [Organization URI]/api/data/v9.0/accounts/?$count=true

还有其他方法吗?

4 个答案:

答案 0 :(得分:2)

不幸的是,我们必须选择一种方法来根据限制内的预期结果确定记录数。

1。如果少于5000,请使用以下命令:(您已经尝试过)

GET [Organization URI]/api/data/v9.0/accounts/?$count=true

2。少于50,000,请使用:

GET [Organization URI]/api/data/v8.2/accounts?fetchXml=[URI-encoded FetchXML query]

超出限制将显示错误:AggregateQueryRecordLimit exceeded. Cannot perform this operation.

示例查询:

<fetch version="1.0" mapping="logical" aggregate="true">
  <entity name="account">
    <attribute name="accountid" aggregate="count" alias="count" />
  </entity>
</fetch>

使用URI进行浏览器地址栏测试:

[Organization URI]/api/data/v8.2/accounts?fetchXml=%3Cfetch%20version=%221.0%22%20mapping=%22logical%22%20aggregate=%22true%22%3E%3Centity%20name=%22account%22%3E%3Cattribute%20name=%22accountid%22%20aggregate=%22count%22%20alias=%22count%22%20/%3E%3C/entity%3E%3C/fetch%3E
  

解决此问题的唯一方法是根据某些属性对数据集进行分区,以使记录的较小子集可以单独汇总。

Read more

3。最后的方法是遍历@odata.nextLink ,并使用代码变量(code example to query the next page)对每个页面中的记录进行计数

答案 1 :(得分:2)

XrmToolBox具有counting tool可以帮助解决此问题。

此外,我们这里的MetaTools Inc.刚刚发布了一个名为AggX的在线工具,该工具可以在Dynamics 365 Online组织中的任意数量的记录上运行聚合,并且在Beta版期间是免费的。

答案 2 :(得分:1)

您可以尝试使用OData's $ inlinecount查询选项。 在查询字符串中仅添加$inlinecount=allpages会返回所有记录,因此在URI中添加$top=1只能获取一条记录以及所有记录的数量。

您的URL看起来像/accounts/?$inlinecount=allpages&$top=1

例如,click here和响应XML的计数将为<m:count>11</m:count>

  

注意:此查询选项仅在OData 2.0版和   以上

答案 3 :(得分:1)

使用功能RetrieveTotalRecordCount

如果要检索超过5000个实体的记录总数,请使用RetrieveTotalRecordCount函数。

您的查询将如下所示:

https://<your api url>/RetrieveTotalRecordCount(EntityNames=['accounts'])