Terrasoft.Common.InvalidObjectStateException: Превышено ограничение 20000 записей при выгрузке данных объекта
2 сентября 2021 10:00
using System;
using System.Collections.Generic;
using Terrasoft.Core;
using Terrasoft.Core.DB;
using Terrasoft.Core.Entities;
namespace Norbit.Crm.EsPlus.Common
{
///
/// Методы расширения для ESQ.
///
public static class EsqExtensions
{
///
/// Постраничное чтение ESQ запроса.
///
/// Запрос.
/// Пользовательское подключение.
/// Количество считываемых записей за один раз(по умолчанию 1000).
/// Коллекция объектов из запроса.
public static List GetEntityCollectionPaginatedReading(
this EntitySchemaQuery esq,
UserConnection userConnection,
EntitySchemaQueryOptions options = null,
int rowCount = 1000)
{
if (esq == null)
{
throw new ArgumentNullException(nameof(esq));
}
if (userConnection == null)
{
throw new ArgumentNullException(nameof(userConnection));
}
var entityCollection = new List();
esq.UseOffsetFetchPaging = true; /// Использовать постраничное чтение.
var esqOptions = options ?? new EntitySchemaQueryOptions /// Настройки получения коллекции.
{
PageableRowCount = rowCount, /// Количество считываемых записей.
RowsOffset = 0, /// Количество записей, которые необходимо пропустить
PageableDirection = PageableSelectDirection.Next,
PageableConditionValues = new Dictionary()
};
var entities = esq.GetEntityCollection(userConnection, esqOptions);
while (entities.Count > 0)
{
foreach (var entity in entities)
{
entityCollection.Add(entity);
}
esqOptions.RowsOffset += esqOptions.PageableRowCount;
esq.ResetSelectQuery(); /// Обнуление результата запроса.
entities = esq.GetEntityCollection(userConnection, esqOptions);
}
return entityCollection;
}
}
}
7 сентября 2021 11:06
Есть подозрение. что поможет
PageableDirection = PageableSelectDirection.First при первом запросе.
потом сменить на Next
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать