Сортировка позволяет расположить элементы массива результатов поиска в порядке возрастания или убывания одного из свойств приложения. Например, можно записать все элементы приложения Сотрудники в порядке возрастания числа их полных лет (переменная Возраст типа Число в приложении).
Метод Search.sort принимает два аргумента. Первый — код свойства приложения,
по которому происходит сортировка (обратите внимание, что для этого свойства в приложении должна быть включена опция Поиск и сортировка по полю).
Второй (типа boolean) определяет, будут ли результаты отображаться в порядке возрастания. При значении, отличном от true, система будет располагать элементы в порядке убывания.
Постраничная выборка применяется, чтобы получать результаты поиска порционно. Это может потребоваться, например, если результаты поиска в дальнейшем обрабатываются в скрипте, который занимает продолжительное время.
Чтобы такой скрипт не завершился из-за истечения таймаута, элементы передаются в него частями.
Также постраничная выборка требуется, если нужно обработать более 10000 элементов приложения, так как это наибольшее количество элементов, возвращаемых методом search().
Процесс состоит из двух блоков Скрипт.
В блоке Скрипт вычисления количества элементов находится скрипт вычисления количества всех элементов приложения,
которые необходимо обработать, а также задаётся начальное значение счётчика:
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());
}
// Сохраняем все изменённые элементыawaitPromise.all(promises);
Context.data.work_element = Context.data.work_element! + 50;
В данном скрипте string — одно из свойств приложения contracts (его нам и требуется изменить).
После второго скрипта располагается шлюз, который по умолчанию возвращает на предыдущий шаг, чтобы осуществить обработку следующих 50 элементов.
Это происходит, пока не выполнится условие work_element >= complete, что будет означать, что количество обработанных элементов больше или равно
общему количеству найденных элементов приложения.
Как использовать постраничную выборку и сортировку при поиске элементов приложения
Сортировка позволяет расположить элементы массива результатов поиска в порядке возрастания или убывания одного из свойств приложения.
Например, можно записать все элементы приложения Сотрудники в порядке возрастания числа их полных лет (переменная Возраст типа Число в приложении).
Метод 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
, что будет означать, что количество обработанных элементов больше или равно общему количеству найденных элементов приложения.