计算Dynamics CRM Online web api(ODATA)中的所有行



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

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

根据微软的说法,你不能在请求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

还有别的办法吗?

使用函数RetrieveTotalRecordCount:

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

您的查询将如下所示:

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

更新:

最新版本v9.1具有实现这一点的直接功能-RetrieveTotalRecordCount

--------------------------------------------------------

不幸的是,我们不得不选择其中一条路线,以在限制范围内根据预期结果确定记录数。

1.如果少于5000,请使用此:(您已经尝试过了(

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

2.小于50000,使用此:

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

解决这一问题的唯一方法是基于某些属性对数据集进行分区,以便获得更小的记录子集来单独聚合。

阅读更多

3.最后的手段是通过@odata.nextLink迭代,并使用代码变量(用于查询下一页的代码示例(对每页中的记录进行计数

XrmToolBox有一个计数工具可以帮助实现这一点。

此外,我们MetaTools股份有限公司刚刚发布了一款名为AggX的在线工具,该工具可以在Dynamics 365 online组织中的任何数量的记录上运行聚合,在测试版期间是免费的。

您可以尝试OData的$inlinecount查询选项。在querystring中只添加$inlinecount=allpages将返回所有记录,因此在URI中添加$top=1将只获取一条记录以及所有记录的计数。

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

例如,单击此处,响应XML将计数为<m:count>11</m:count>

注意:此查询选项仅在OData 2.0版和高于

这是有效的:

[组织URI]/api/data/v8.2/accounts$计数

最新更新