是否可以绕过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$计数