Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
product:triggers:new [17.08.2022 11:26] – [Страница создания нового триггера] Лазаренко Павелproduct:triggers:new [01.02.2024 11:41] (текущий) Караваева Яна
Строка 1: Строка 1:
 ====== Создание триггера ====== ====== Создание триггера ======
 Триггер в 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. **Название** \\ 
Строка 15: Строка 16:
 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. Кнопки "**Опубликовать**" и "**Удалить**". \\
Строка 23: Строка 24:
  
 Фильтрация событий проходит в несколько этапов с помощью 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>
 ==== Встроенные переменные ==== ==== Встроенные переменные ====
  
Строка 44: Строка 106:
  
 ''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>