- Главная [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
- Начало работы
- Работа с типами
- Глобальный контекст и изоляция
- Работа с приложениями
- Массовые действия с элементами приложения
- Работа с внешними сервисами
- Скрипты в виджетах
- Веб компоненты
- Права доступа
- Начало работы с процессами
- Начало работы с подписями
- Начало работы с предпросмотром файлов
- Начало работы с организационной структурой
- Начало работы с пользователями и группами
- Начало работы с типом данных Таблица
- Как решить вашу задачу
- Как сделать пользовательское отображение элементов приложений
- Как сделать динамическое отображение полей/виджетов со сложным условием
- Как регистрировать документ
- Как рассчитывать интервал между датами
- Как создать замещение пользователя
- Как использовать пагинацию и сортировку при поиске элементов приложения
- API
- Типы объектов
- Типы данных
- Глобальные константы
- Работа с приложениями
- Веб-запросы
- Права доступа
- Документооборот
- Линии
- Виджет «Код»
- Подписи
- Рабочие календари
- Интеграция с IP-телефонией
- Интеграция с сервисами рассылок
В этой статье
Как использовать пагинацию и сортировку при поиске элементов приложения
Сортировка позволяет расположить элементы массива результатов поиска в порядке возрастания или убывания одного из свойств приложения.
Например, можно записать все элементы приложения Сотрудники в порядке возрастания числа их полных лет (переменная Возраст типа Число в приложении).
Метод Search.sort принимает два аргумента. Первый — код свойства приложения, по которому происходит сортировка (обратите внимание, что для этого свойства в приложении должна быть включена опция Поиск и сортировка по полю). Второй (типа boolean) определяет, будут ли результаты отображаться в порядке возрастания. При значении, отличном от
true
, система будет располагать элементы в порядке убывания.const employees = await Context.fields.employee.app.search().sort('age',true).size(10000).all();
Пагинация
Пагинация применяется, чтобы получать результаты поиска порционно.
Это может потребоваться, например, если результаты поиска в дальнейшем обрабатываются в скрипте, который занимает продолжительное время. Чтобы такой скрипт не завершился из-за истечения таймаута, будем передавать в него элементы частями.
Также пагинация потребуется, если нужно обработать более 10000 элементов приложения, так как это наибольшее количество элементов, возвращаемых методом
search()
.Процесс состоит из двух блоков Скрипт.
В блоке Скрипт вычисления количества элементов находится скрипт вычисления количества всех элементов приложения, которые необходимо обработать, а также задается начальное значение счетчика:
const counter = await Namespace.app.contracts.search().count(); Context.data.total = counter; Context.data.str = counter.toString()+ " — найдено всего"; Context.data.work_element = 0;
В данном скрипте:
contracts
— название приложения, с которым идет работа;counter
иContext.data.total
— общее количество элементов приложения, обработка которых будет производиться;Context.data.work_element
— переменная типа Число; счетчик элементов, с которыми будет работать поиск;Context.data.str
— переменная типа Строка, которая выводит количество найденных элементов.Во втором блоке Загрузка и работа с очередными 50 шт. находится скрипт для обработки одной «порции» экземпляров:
const batch = await Namespace.app.contracts.search().from(Context.data.work_element!).size(50).all(); /* Объявим переменную, которая позволит сохранить все элементы сразу, не прибегая к асинхронным вызовам внутри цикла */ let promises: Promise<void> [] = []; for (let item of batch) { item.data.string = "Выполнено"; promises.push(item.save()); } // Сохраняем все измененные элементы await Promise.all(promises); Context.data.work_element = Context.data.work_element! + 50;
В данном скрипте
string
— одно из свойств приложенияcontracts
(его нам и требуется изменить).После второго скрипта располагается шлюз, который по умолчанию возвращает на предыдущий шаг, чтобы осуществить обработку следующих 50 элементов. Это происходит, пока не выполнится условие
work_element >= complete
, что будет означать, что количество обработанных элементов больше или равно общему количеству найденных элементов приложения.