- Главная [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],[object Object]
- Начало работы
- Работа с типами
- Глобальный контекст и изоляция
- Работа с приложениями
- Массовые действия с элементами приложения
- Работа с внешними сервисами
- Скрипты в виджетах
- Веб компоненты
- Права доступа
- Начало работы с процессами
- Начало работы с подписями
- Начало работы с предпросмотром файлов
- Начало работы с организационной структурой
- Начало работы с пользователями и группами
- Начало работы с типом данных Таблица
- Динамическое вычисление типа события
- Как решить вашу задачу
- Как сделать пользовательское отображение элементов приложений
- Как сделать динамическое отображение полей/виджетов со сложным условием
- Как регистрировать документ
- Как рассчитывать интервал между датами
- Как создать замещение пользователя
- Как использовать пагинацию и сортировку при поиске элементов приложения
- API
- Типы объектов
- Типы данных
- Глобальные константы
- Работа с приложениями
- Веб-запросы
- Права доступа
- Документооборот
- Линии
- Виджет «Код»
- Подписи
- Рабочие календари
- Интеграция с IP-телефонией
- Интеграция с сервисами рассылок
В этой статье
Динамическое вычисление типа события
Начиная с версии системы 2024.11 доступно динамическое вычисление типа события при помощи скрипта. Оно позволяет сформировать фильтр для событий, при наступлении которых срабатывает определённый обработчик.
Динамическое вычисление типа события доступно в доменах:
Чтобы настроить динамическую фильтрацию событий по типу, перейдите к созданию обработчика событий, выберите домен и включите опцию Динамически вычислять тип события скриптом. Поле Событие скроется.
Нажмите Создать. Откроется страница настройки обработчика событий.
Вы увидите название обработчика и указанный домен события. Изменение домена после создания обработчика недоступно.
В поле Событие отобразится ссылка Вычисляется скриптом. Нажмите на неё, чтобы открыть скрипт с методом фильтрации.
Метод формирования фильтра событий имеет следующие параметры:
filter()
;Promise<EventsFilterType>
.Для корректной работы динамической фильтрации не изменяйте имя и параметры метода. В теле метода
filter()
сформируйте фильтр по событиям. Если метод возвращает пустое значение, обработчик событий не вызывается.Чтобы определить условия для фильтрации, используйте метод
where()
. В зависимости от домена события, внутриwhere()
доступны различные свойства.Если при создании обработчика событий выбран домен Все события, вы можете использовать:
any
— произвольное событие, которое позволяет выбрать события из различных доменов;app
— события по элементам приложений.При указании домена Элементы приложений доступно только свойство
app
, которое позволяет включить в фильтр события по элементам приложений.Фильтры по элементам приложений
Для фильтрации доступны события из домена Элементы приложений.
В методы этого домена можно передать:
async function filter (): Promise<EventsFilterType> { const filter = System.events.filter(); filter.where(f => f.app.itemCreate(Namespace.params.fields.invoicesApp.app)); return filter; }
async function filter (): Promise<EventsFilterType> { const filter = System.events.filter(); filter.where(f => f.app.itemCreate("ordersNamespace", "invoicesApp")); return filter; }
Фильтры по всем событиям
Доступно создание фильтра для событий по элементам приложений, а также для произвольных событий.
При указании произвольного события можно выбрать определённые события системы из разных доменов. Их список ограничен. При создании фильтра вы увидите подсказки с возможными значениями.
Для формирования фильтра по произвольным событиям в
where()
нужно обратиться к методуevent()
свойстваany
.События задаются в виде объекта со свойствами:
namespace
иcode
— для произвольного события задайте домен события. Для события по элементам приложения укажите раздел, в котором хранится приложение, и само приложение;name
— укажите событие, которое будет отслеживаться.События домена Элементы приложений можно описать через произвольное событие следующим образом:
async function filter (): Promise<EventsFilterType> { const filter = System.events.filter(); // Произвольное событие по созданию приложения `invoicesApp` в разделе `ordersNamespace` filter.where(f => f.any.event({namespace:"ordersNamespace", code: "invoicesApp", name:"item_create"})); // Полностью соответствует записи filter.where(f => f.app.itemCreate("ordersNamespace", "invoicesApp")); return filter; }
Варианты написания скрипта для динамической фильтрации событий
Метод
where()
можно вызывать любое количество раз: в рамках одного фильтра его результаты складываются.Рассмотрим примеры скриптов для динамической фильтрации событий.
Список значений
async function filter (): Promise<EventsFilterType> { const filter = System.events.filter(); filter .where(f => [ f.any.event({namespace:"system", code: "users", name: "login_failed"}), f.app.addComment("ordersNamespace", "invoicesApp"), f.app.itemCreate("ordersNamespace", "contractsApp") ]); return filter; }
Строитель (Builder)
После вызова метода
where()
можно использовать его повторно:async function filter (): Promise<EventsFilterType> { const filter = System.events.filter(); filter .where(f => f.any.event({namespace:"system", code: "users", name: "login_failed"})) .where(f => f.app.addComment("ordersNamespace", "invoicesApp")) .where(f => f.app.itemCreate("ordersNamespace", "contractsApp")); return filter; }
Комбинирование условий
async function filter (): Promise<EventsFilterType> { const filter = System.events.filter(); switch (Namespace.params.data.string_condition) { case "invoices_events": filter.where(f => [ f.app.itemCreate("ordersNamespace", "invoicesApp"), f.app.itemUpdate("ordersNamespace", "invoicesApp"), ]); break; case "order_events": filter.where(f => f.app.itemCreate("ordersNamespace", "contractsApp")); filter.where(f => f.app.itemUpdate("ordersNamespace", "contractsApp")); break; default: filter.where(f => f.app.itemCreate("ordersNamespace", "ordersApp")); break; } filter.where(f => [ f.app.itemCreate("ordersNamespace", "suppliersApp"), f.app.itemUpdate("ordersNamespace", "suppliersApp") ]); return filter; }
Особенности динамической фильтрации
При использовании динамической фильтрации можно выделить следующие особенности:
where()
значения в фильтре суммируются;Когда выполняется скрипт динамической фильтрации
Заданный в скрипте фильтр формируется:
После этого сформированный фильтр используется для отбора событий, по которым вызывается обработчик.
Ошибки при исполнении скрипта динамической фильтрации
Если при исполнении скрипта фильтрации возникает ошибка, то на вкладке Обработка событий напротив обработчика отобразится значок ошибки.
При нажатии на значок вы увидите текст ошибки и сможете перейти к редактированию скрипта.
Общие ограничения в фильтрации
Если значения передаются в метод фильтрации в виде строк, нельзя передавать пустую строку или символ
*
. Это приведёт к ошибке при выполнении скрипта.