| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
| product:triggers:new [22.08.2022 10:13] – anna.makhneva | product:triggers:new [01.02.2024 11:41] (текущий) – Караваева Яна |
|---|
| Фильтрация событий проходит в несколько этапов с помощью 3 основных инструментов, которые дополняют друг друга. | Фильтрация событий проходит в несколько этапов с помощью 3 основных инструментов, которые дополняют друг друга. |
| - Простой фильтр на события, и связанные с ними объекты, который есть прямо в интерфейсе модуля триггеров в **выпадающем списке**. | - Простой фильтр на события, и связанные с ними объекты, который есть прямо в интерфейсе модуля триггеров в **выпадающем списке**. |
| - **LINQ-запрос(ы)** - используются (при необходимости) в фильтрации событий и в самих скриптах. Подробнее о настройке LINQ-запросов - [[product/linq/about|здесь]]. | - **LINQ-запрос(ы)** - используются (при необходимости) в фильтрации событий и в самих скриптах. Подробнее о настройке LINQ-запросов - [[product:linq:new|здесь]]. |
| - Дополнительная логика, прописанная в окне **"Условие"** для последней тонкой фильтрации событий. | - Дополнительная логика, прописанная в окне **"Условие"** для последней тонкой фильтрации событий. |
| |
| События, которые попали под условия фильтров, запускают написанный скрипт. Результатом работы скрипта могут быть небольшие вычисления, создание новых записей в справочнике, новых объектов, изменение статусов, изменение значений реквизитов, их блокировка и т.д. Здесь мы описали [[product/triggers/lib|примеры готовых решений]] на основе триггеров. | События, которые попали под условия фильтров, запускают написанный скрипт. Результатом работы скрипта могут быть небольшие вычисления, создание новых записей в справочнике, новых объектов, изменение статусов, изменение значений реквизитов, их блокировка и т.д. Здесь мы описали [[product/triggers/library|примеры готовых решений]] на основе триггеров. |
| |
| | В Системе можно создать [[product:linq:new|источник данных LINQ]] и задать ему референсный ключ, чтобы в дальнейшем по нему вызвать этот источник в **Условии** триггера или в самом **Скрипте**. |
| | |
| | ==== Вызов API в триггерах ==== |
| Триггеры работают через [[product/api/list|интеграционное API]] ADVANTA ⇒ Всё, что можно сделать через API, триггер может сделать в системе. | Триггеры работают через [[product/api/list|интеграционное API]] ADVANTA ⇒ Всё, что можно сделать через API, триггер может сделать в системе. |
| |
| В Системе можно создать [[product/linq/about|источник данных LINQ]] и задать ему референсный ключ, чтобы в дальнейшем по нему вызвать этот источник в **Условии** триггера или в самом **Скрипте**. | Перед вызовом 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> |
| ==== Встроенные переменные ==== | ==== Встроенные переменные ==== |
| |