Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
product:triggers:new [24.08.2022 11:31] – ↷ Операцией перемещения обновлены ссылки 207.46.13.163product:triggers:new [01.02.2024 11:41] (текущий) Караваева Яна
Строка 28: Строка 28:
   - Дополнительная логика, прописанная в окне **"Условие"** для последней тонкой фильтрации событий.   - Дополнительная логика, прописанная в окне **"Условие"** для последней тонкой фильтрации событий.
  
-События, которые попали под условия фильтров, запускают написанный скрипт. Результатом работы скрипта могут быть небольшие вычисления, создание новых записей в справочнике, новых объектов, изменение статусов, изменение значений реквизитов, их блокировка и т.д. Здесь мы описали [[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:new|источник данных 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>
 ==== Встроенные переменные ==== ==== Встроенные переменные ====