Триггер в ADVANTA содержит указание, когда он должен сработать, набор проверок, когда нужно выполнить набор действий, и сам набор действий.
Кнопка создания триггера расположена в разделе «Управление триггерами».
Содержит следующие поля:
1. Название
2. Описание
3. Теги — используются для дальнейшего поиска триггера в списке на странице «Управление триггерами»
4. Таймаут, сек
5. Выпадающий список «Порядок обработки событий» с 3 вариантами:
6. Переключатель «Выполнять повторно при сбое».
7. Выпадающий список «События» – перечень всех событий, которые генерирует Система при выполнений каких либо действий в ней. Исчерпывающий перечень событий на которые можно создать триггер.
8. Окно «Условие» – окно для записи, отображения и изменения кода C#.
В данном окне необходимо написать код условия, который должен возвращать либо значение false, либо значение true. Необходимо вернуть false, если скрипт выполнять не требуется.
9. Окно «Скрипт» – окно для записи, отображения и изменения кода C#.
В данном окне необходимо написать код основной логики (действий) триггера, который будет выполняться при выполнении Условия.
10. Кнопки «Опубликовать» и «Удалить».
Фильтрация событий проходит в несколько этапов с помощью 3 основных инструментов, которые дополняют друг друга.
События, которые попали под условия фильтров, запускают написанный скрипт. Результатом работы скрипта могут быть небольшие вычисления, создание новых записей в справочнике, новых объектов, изменение статусов, изменение значений реквизитов, их блокировка и т.д. Здесь мы описали примеры готовых решений на основе триггеров.
В Системе можно создать источник данных LINQ и задать ему референсный ключ, чтобы в дальнейшем по нему вызвать этот источник в Условии триггера или в самом Скрипте.
Триггеры работают через интеграционное API ADVANTA ⇒ Всё, что можно сделать через API, триггер может сделать в системе.
Перед вызовом API нужно везде указывать await
, иначе произойдет инициация кода вызова без ожидания результата.
Создание нового объекта - пример:
var newItem = new Api.Projects.CreateProjectDataContract { // some code ... }; // create new Item using ADVANTA API var newItemID = await Api.Projects.CreateProjectAsync(newItem);
Если не дождаться через await
вызова API, то может произойти завершение работы триггера раньше, чем завершится вызов.
В итоге произойдет ошибка при вызове.
Если требуется определить собственную локальную функцию/процедуру для использования в скрипте триггера, то ее описание должно быть сделано с использованием префикса async
в следующем формате
async Task<string> MyFunctionName() { // your code ... return result; }
где вместо string
необходимо указать тип переменной, которая будет возвращаться из локальной функции.
Если возвращать из функции ничего не требуется, то определение функции будет в формате:
async Task MyFunctionName() { // your code ... }
Для вызова созданной таким образом локальной функции/процедуры внутри скрипта триггера, рекомендуется использовать префикс await
для ожидания ее завершения.
var result = await MyFunctionName();
Пример объявления локальной функции и ее вызова:
async Task CreateLog(string Text) { TriggerConsole.WriteLine(Text); await System.Threading.Tasks.Task.Delay(1000); } for(int i = 0; i < 10; i++) { await CreateLog(i.ToString()); }
Context.ApplicationId
- ID приложения Адванты, если настроено
Context.EventId
- ID сообщения в шине
Context.EventSentTime
- Время отправки сообщения из системы
Context.Host
- Адрес системы, по которому она установлена
Context.PersonId
- ID пользователя вызвавшего появление события
Context.PrincipalId
- ID внутреннего пользователя системы (обычно не используется)
Context.SessionId
- ID сессии, от которой модуль триггеров работает в системе. Нужен для передачи в API методы
Event
- Содержит параметры события, на которое сделан триггер.
Контекстно определяется тем событием, на которое написан триггер.
В общем случае разные типы событий содержит разный набор полей.