У нас огромное количество записей в нашей сущности CRM. Я пытаюсь получить общее количество записей с помощью совокупного числа в выборке XML. Но у него есть ограничение в 50000 записей. Я думаю, что есть способ изменить эту настройку в локальной CRM. Но я не хочу это менять.
Ранее мы использовали метод нумерации страниц для получения общего количества (5000 каждый раз). Но это занимает много времени
public static int GetTotalRowCount(string fetchXml)
{
try
{
using (OrganizationServiceContext svcContext = new OrganizationServiceContext(ServerConnection.CrmService))
{
int totalCount = 0;
int fetchCount = 5000;
int pageNumber = 1;
string pagingCookie = null;
string xml = string.Empty;
RetrieveMultipleRequest fetchRequest1 = null;
EntityCollection entityCollection = null;
xml = CreateXml(fetchXml, pagingCookie, pageNumber, fetchCount);
fetchRequest1 = new RetrieveMultipleRequest
{
Query = new FetchExpression(xml)
};
entityCollection = ((RetrieveMultipleResponse)svcContext.Execute(fetchRequest1)).EntityCollection;
while (entityCollection.MoreRecords)
{
//moving to next page
pageNumber++;
xml = CreateXml(fetchXml, pagingCookie, pageNumber, fetchCount);
fetchRequest1 = new RetrieveMultipleRequest
{
Query = new FetchExpression(xml)
};
entityCollection = ((RetrieveMultipleResponse)svcContext.Execute(fetchRequest1)).EntityCollection;
totalCount = totalCount + entityCollection.Entities.Count;
}
return totalCount;
}
}
catch (Exception ex)
{
}
}
но это занимает много времени. Поэтому я изменил его на метод совокупного подсчета -
Изменил Fetchxml, как это -
<fetch mapping='logical' output-format='xml-platform' no-lock='true' distinct='false' aggregate='true'>
<entity name='abc_data'>
<attribute name='abc_id' aggregate='count' alias='count'/>.....
код, подобный этому
int Count = 0;
FetchExpression fetch = new FetchExpression(fetchXml);
EntityCollection result = ServerConnection.CrmService.RetrieveMultiple(fetch);
if (result.Entities.Count > 0)
{
Entity entity = result.Entities[0];
AliasedValue value = (AliasedValue)entity["count"];
Count = (int)value.Value;
}
return Count ;
Теперь здесь выдается исключение, если записи превышают 50000.
Так есть ли способ получить 50000 записей за один раз с помощью совокупного счета и пройти по нему, чтобы получить общий счет?