Триггер в ADVANTA содержит указание, когда он должен сработать, набор проверок, когда нужно выполнить набор действий, и сам набор действий.
Кнопка создания триггера расположена в разделе «Управление триггерами».
Содержит следующие поля:
Фильтрация событий проходит в несколько этапов с помощью 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 приложения ADVANTA, если настроено;Context.EventId - ID сообщения в шине;Context.EventSentTime - время отправки сообщения из Системы;Context.Host - адрес Системы, по которому она установлена;Context.PersonId - ID пользователя вызвавшего появление события;Context.PrincipalId - ID внутреннего пользователя Системы (обычно не используется);Context.SessionId - ID сессии, от которой модуль триггеров работает в Системе. Нужен для передачи в API методы;Event - содержит параметры события, на которое сделан триггер. Контекстно определяется тем событием, на которое написан триггер. В общем случае разные типы событий содержит разный набор полей.