| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
| product:triggers:new [17.08.2022 11:26] – [Страница создания нового триггера] Лазаренко Павел | product:triggers:new [01.02.2024 11:41] (текущий) – Караваева Яна |
|---|
| ====== Создание триггера ====== | ====== Создание триггера ====== |
| Триггер в ADVANTA содержит указание, когда он должен сработать, набор проверок, когда нужно выполнить набор действий, и сам набор действий. \\ | Триггер в ADVANTA содержит указание, когда он должен сработать, набор проверок, когда нужно выполнить набор действий, и сам набор действий. \\ |
| Кнопка создания триггера расположена в разделе "**Управление триггерами**". | Кнопка создания триггера расположена в разделе "**Управление триггерами**". \\ |
| | <image shape="thumbnail">{{:product:triggers:снимок_экрана_2022-08-18_в_17.14.21.png?nolink|}}</image> |
| ==== Страница создания нового триггера ==== | ==== Страница создания нового триггера ==== |
| | <image shape="thumbnail">{{:product:triggers:снимок_экрана_2022-08-18_в_17.29.25.png?nolink|}}</image> |
| Содержит следующие поля: \\ | Содержит следующие поля: \\ |
| 1. **Название** \\ | 1. **Название** \\ |
| 6. Переключатель «**Выполнять повторно при сбое**». \\ | 6. Переключатель «**Выполнять повторно при сбое**». \\ |
| 7. Выпадающий список «**События**» – перечень всех событий, которые генерирует Система при выполнений каких либо действий в ней. Исчерпывающий перечень событий на которые можно создать триггер. \\ | 7. Выпадающий список «**События**» – перечень всех событий, которые генерирует Система при выполнений каких либо действий в ней. Исчерпывающий перечень событий на которые можно создать триггер. \\ |
| 8. Окно «**Условие**» – окно для записи, отображения и изменения кода C#. \\ В данном окне необходимо написать код условия, который должен возвращать либо значение false, либо значение true. Необходимо вернуть false, если скрипт выполнять не требуется. \\ | 8. Окно «**Условие**» – окно для записи, отображения и изменения кода C#. \\ В данном окне необходимо написать код условия, который должен возвращать либо значение false, либо значение true. Необходимо вернуть false, если скрипт выполнять не требуется. \\ <image shape="thumbnail">{{:product:triggers:снимок_экрана_2022-08-18_в_17.34.59.png?nolink|}}</image> |
| 9. Окно «**Скрипт**» – окно для записи, отображения и изменения кода C#. \\ В данном окне необходимо написать код основной логики (действий) триггера, который будет выполняться при выполнении Условия. \\ | 9. Окно «**Скрипт**» – окно для записи, отображения и изменения кода C#. \\ В данном окне необходимо написать код основной логики (действий) триггера, который будет выполняться при выполнении Условия. \\ |
| 10. Кнопки "**Опубликовать**" и "**Удалить**". \\ | 10. Кнопки "**Опубликовать**" и "**Удалить**". \\ |
| |
| Фильтрация событий проходит в несколько этапов с помощью 3 основных инструментов, которые дополняют друг друга. | Фильтрация событий проходит в несколько этапов с помощью 3 основных инструментов, которые дополняют друг друга. |
| - Простой фильтр на события, который есть прямо в интерфейсе модуля триггеров в **выпадающем списке**. | - Простой фильтр на события, и связанные с ними объекты, который есть прямо в интерфейсе модуля триггеров в **выпадающем списке**. |
| - **LINQ-запрос(ы)** - используются (при необходимости) в фильтрации событий и в самих скриптах. Подробнее о настройке LINQ-запросов - [[product/linq/about|здесь]]. | - **LINQ-запрос(ы)** - используются (при необходимости) в фильтрации событий и в самих скриптах. Подробнее о настройке LINQ-запросов - [[product:linq:new|здесь]]. |
| - Дополнительная логика, прописанная в окне **"Условие"** для последней тонкой фильтрации событий. | - Дополнительная логика, прописанная в окне **"Условие"** для последней тонкой фильтрации событий. |
| |
| События, которые попали под условия фильтров, запускают написанный скрипт. Результатом работы скрипта могут быть небольшие вычисления, создание новых записей в справочнике, новых объектов, изменение статусов, изменение значений реквизитов, их блокировка и т.д. Здесь мы описали [[product/triggers/lib|примеры готовых решений]] на основе триггеров. | События, которые попали под условия фильтров, запускают написанный скрипт. Результатом работы скрипта могут быть небольшие вычисления, создание новых записей в справочнике, новых объектов, изменение статусов, изменение значений реквизитов, их блокировка и т.д. Здесь мы описали [[product/triggers/library|примеры готовых решений]] на основе триггеров. |
| |
| Триггеры работают через [[product/api/list|интеграционное API]] ADVANTA ⇒ Всё, что можно сделать через API, триггер может запустить в системе. | В Системе можно создать [[product:linq:new|источник данных LINQ]] и задать ему референсный ключ, чтобы в дальнейшем по нему вызвать этот источник в **Условии** триггера или в самом **Скрипте**. |
| |
| В Системе можно создать [[product/linq/about|источник данных LINQ]] и задать ему референсный ключ, чтобы в дальнейшем по нему вызвать этот источник в **Условии** триггера или в самом **Скрипте**. | ==== Вызов API в триггерах ==== |
| | Триггеры работают через [[product/api/list|интеграционное API]] ADVANTA ⇒ Всё, что можно сделать через API, триггер может сделать в системе. |
| |
| | Перед вызовом API нужно везде указывать ''await'', иначе произойдет инициация кода вызова без ожидания результата. |
| | |
| | |
| | Создание нового объекта - пример: |
| | <code csharp [enable_line_numbers="false", highlight_lines_extra="7", enable_keyword_links="false"]> |
| | var newItem = new Api.Projects.CreateProjectDataContract |
| | { |
| | // some code ... |
| | }; |
| | |
| | // create new Item using ADVANTA API |
| | var newItemID = await Api.Projects.CreateProjectAsync(newItem); |
| | </code> |
| | |
| | |
| | <callout type="success"> Триггер по мере необходимости создает SOAP-клиенты для взаимодействия с SOAP API (иначе пришлось бы перед каждым вызовом API создавать нужные SOAP-клиенты). \\ По завершению триггера все открытые триггером SOAP-клиенты закрываются. </callout> |
| | |
| | Если не дождаться через ''await'' вызова API, то может произойти завершение работы триггера раньше, чем завершится вызов. \\ В итоге произойдет ошибка при вызове. |
| | |
| | ==== Локальные функции ==== |
| | Если требуется определить собственную локальную функцию/процедуру для использования в скрипте триггера, то ее описание должно быть сделано с использованием префикса ''async'' в следующем формате \\ |
| | <code csharp> |
| | async Task<string> MyFunctionName() |
| | { |
| | // your code ... |
| | return result; |
| | } |
| | </code> |
| | где вместо ''string'' необходимо указать тип переменной, которая будет возвращаться из локальной функции. |
| | |
| | |
| | \\ |
| | Если возвращать из функции ничего не требуется, то определение функции будет в формате:\\ |
| | <code csharp> |
| | async Task MyFunctionName() |
| | { |
| | // your code ... |
| | } |
| | </code> |
| | \\ |
| | Для вызова созданной таким образом локальной функции/процедуры внутри скрипта триггера, рекомендуется использовать префикс ''await'' для ожидания ее завершения. |
| | |
| | <code csharp> |
| | var result = await MyFunctionName(); |
| | </code> |
| | \\ |
| | |
| | Пример объявления локальной функции и ее вызова: |
| | <code csharp> |
| | 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()); |
| | } |
| | </code> |
| ==== Встроенные переменные ==== | ==== Встроенные переменные ==== |
| |
| |
| ''Event'' - Содержит параметры события, на которое сделан триггер. \\ Контекстно определяется тем событием, на которое написан триггер. \\ В общем случае разные типы событий содержит разный набор полей. | ''Event'' - Содержит параметры события, на которое сделан триггер. \\ Контекстно определяется тем событием, на которое написан триггер. \\ В общем случае разные типы событий содержит разный набор полей. |
| | |
| | <grid> |
| | <col sm="6"> |
| | <btn block="true">[[product/triggers/start|← К оглавлению]]</btn> |
| | </col> |
| | <col sm="6"> |
| | <btn block="true">[[/product/triggers/monitoring|Мониторинг→]]</btn> |
| | </col> |
| | </grid> |