Dynamics365 默认service.RetrieveMultiple查询超出 限制5000条如何解决
最近在做一个Dynamics365的项目,在用到D365标准功能查询的时候,针对数据量超出5000,默认情况下只返回5000的数据,那要如何解决这个问题呢?
我归纳总结了以下三个办法:
1.修改CRM ConfigDB的配置 字段TotalRecordCountLimit ,再重启IIS生效(不推荐,修改之后所有的查询都放开了,而且还无法确定是否多少够用,容易产生隐藏的坑)
以下是查询 默认最大条数SQL语句:
1 select Id, ColumnName, IntColumn from CRM_CONFIG.dbo.DeploymentProperties where ColumnName='TotalRecordCountLimit'
2.查询语句返回时,用官方方法查下该实体总条数,以判断是否继续查询(可用性低,主要是进行实体的全量数据查询,加条件的查询受限制)
static void OutputTotalRecordCount(IOrganizationService service, params string[] entityNames ) {
var request = new RetrieveTotalRecordCountRequest {
EntityNames = entityNames
};
var response = (RetrieveTotalRecordCountResponse)service.Execute(request);
foreach (var item in response.EntityRecordCountCollection) {
Console.WriteLine($"{item.Key} table has {item.Value} records.");
}
}
3.利用service.RetrieveMultiple(query) 返回的结果 results.MoreRecords 判断是否有更多的数据,用PagingInfo 对象进行分页查询(综上,比较推荐)
public static EntityCollection AllRecords(this IOrganizationService service, QueryExpression query)
{
var entityCollection = new EntityCollection();
int queryCount = 5000;
int pageNumber = 1;
query.PageInfo = new PagingInfo
{
Count = queryCount,
PageNumber = pageNumber,
PagingCookie = null
};
do
{
EntityCollection results = service.RetrieveMultiple(query);
if (results.Entities != null)
{
entityCollection.Entities.AddRange(results.Entities);
}
if (results.MoreRecords)
{
query.PageInfo.PageNumber++;
query.PageInfo.PagingCookie = results.PagingCookie;
}
else
{
break;
}
} while (true);
return entityCollection;
}

浙公网安备 33010602011771号