Особенности выполнения сценариев автоматизации

Предусмотрены неочевидные особенности выполнения сценариев автоматизации, которые необходимо учитывать при их проектировании и использовании, касающиеся:

  • Синхронности и асинхронности выполнения операторов.
  • Порядка выполнения операторов сценариев.
  • Источников данных при выполнении операторов.
  • Взаимодействия сценариев между собой.

Разбор особенностей выполнения сценариев автоматизации выполняется на следующем примере сценария автоматизации:

1. Сценарий ожидает какого-то редактирования объекта (убыток).
2. Сценарий создает задачу, заполняя поля задачи данными из объекта (убыток).
3. Сценарий изменяет стадию убытка на Б и статус задачи на В работе с помощью js-скрипта.
4. Сценарий изменяет что-то в убытке с помощью nocode блока, используя данные из этого же убытка.
5. Сценарий изменяет что-то в задаче с помощью nocode блока, используя данные из созданной ранее задачи.
6-7. В зависимости от стадии убытка выполняется одна из веток оператора Если.
8. Если стадия А, запуститься ожидание следующего изменения стадии убытка.

Хронология работы сценария:

  • Убыток находится в стадии А.
  • Пользователь или js-скрипт изменяет убыток (не меняя стадию).
  • Оператор Ожидать 1 триггерится и в очередь помещается задача для выполнения сценария.
  • Через какое-то время задача для выполнения сценария из очереди забирается в работу.
  • Из БД достается карточка убытка и помещается в контекст выполнения сценария.
  • Проверяются условия в операторе Ожидать 1, используя карточку убытка, загруженную в контекст.
  • Проверяются условия в операторах Если, используя карточку убытка, загруженную в контекст.
  • Выбирается единственная ветка сценария для продолжения сценария — ветка 6, т.кубыток на момент срабатывания оператора Ожидать находится в стадии А.
  • Включается ожидание в операторе Ожидать 8.
  • Оператор Создать 2 помещает в очередь задачу на создание Задачи, используя для получения данныхкарточку убытка, загруженную в контекст (т.к. источник данных для оператора совпадает с объектом срабатывания в операторе Ожидать). После помещения задачи в очередь:
    • Сценарий продолжает свое выполнение
    • Задача создается асинхронно в процессе обработки соответствующей очереди
    • Никакие сценарии при этом не триггерятся, т.к. это no-code-оператор
  • Оператор Запустить скрипт 3 изменяет стадию убытка на Б и изменяет статус задачи на В работе. Это триггерит другие сценарии, т.к. это js-скрипт.
  • Срабатывает оператор Ожидать 8, т.к. у него уже включилось ожидание и изменилась стадия убытка. Ветка оператора Ожидать 8 начинает параллельную работу с текущим сценарием.
  • Оператор Изменить 4 помещает в очередь задачу, которая изменяет убыток, используя для получения данных карточку убытка, загруженную в контекст (т.к. источник данных для оператора совпадает с объектом срабатывания в операторе Ожидать). После помещения задачи в очередь:
    • Сценарий продолжает свое выполнение
    • Убыток изменяется асинхронно в процессе обработки соответствующей очереди
    • Никакие сценарии при этом не триггерятся, т.к. это no-code-оператор
  • Оператор Изменить 5 помещает в очередь задачу на изменение Задачи, но запрашивает данные по задаче из БД, т.к. источник данных для оператора не совпадает с объектом срабатывания в операторе Ожидать. Никакие сценарии при этом не триггерятся, т.к. это no-code-оператор.
  • Обработка ветки сценария для оператора Ожидать 1 завершается.

Временной лаг между событием и выполнением сценария

Между действием пользователя или системным событием, которое приводит к срабатыванию сценария автоматизации, и фактическим началом выполнения сценария может возникать временной интервал (лаг):

  • Причина возникновения лага — постановка сценария в очередь обработки.
  • Длительность лага зависит от:
    • Текущего размера очереди сценариев
    • Нагрузки на воркеры обработки сценариев

В течение данного временного интервала объект, для которого был инициирован сценарий, может быть изменен другими пользователями, процессами или сценариями.

Такие изменения могут повлиять на выполнение сценария, включая проверку условий в операторах Ожидать и Если.


  • Изменяются данные объекта, что является событием для запуска сценария автоматизации.
  • Срабатывает оператор Ожидать, и сценарий помещается в очередь выполнения.
  • При срабатывании оператора Ожидать в контексте передаются данные объекта-условия срабатывания на момент запуска сценария.
  • До начала выполнения сценария объект может быть изменен повторно (пользователем или иным сценарием / скриптом).
  • Сценарий автоматизации продолжит работу по данным объекта-условия срабатывания из контекста, что может привести к неочевидному проведению (например, результат проверки последующих условий в сценарии автоматизации).
  • Когда сценарий начнет выполняться, будут проверяться условия операторов Ожидать и Если на основании состояния объекта в момент срабатывания сценария.

Запуск сценариев при изменениях, выполненных другими сценариями / JS-скриптами

Действия, выполняемые:

  • Операторами Создать и Изменить (no-code-операторами сценариев) не инициируют запуск других сценариев автоматизации — если изменения, выполненные этими операторами, соответствуют условиям запуска других сценариев, такие сценарии автоматически не запускаются.
  • С использованием скрипта, обрабатываются как обычные изменения данных.

Такие изменения могут инициировать запуск других сценариев автоматизации.

В частности могут сработать:

  • Другие сценарии автоматизации.
  • Операторы Ожидать, расположенные далее в текущем сценарии (ниже операторов Вставить (скрипт), Запустить скрипт).

Момент вычисления условий в операторе Если

Условия, указанные в операторе Если, вычисляются сразу после проверки условий оператора Ожидать, расположенного ранее в цепочке выполнения сценария.

Проверка условий выполняется на основании данных объекта-условия срабатывания, загруженного в контекст выполнения сценария, например:

  • Сценарий:
    • Ожидать: создание объекта (стадия по умолчанию = А)
    • Изменить: стадия = Б
    • Если: стадия = Б
    • Создать: Задача
  • Поведение:
    • Создан объект
    • Выполнен запуск сценария (в контекст переданы данные объекта со стадией А)
    • Проверка условий в операторе Если выполнена сразу после оператора Ожидать (стадия = А), не дожидаясь выполнения других блоков между операторами Ожидать и Если
    • В результате условия в операторе Если не выполнены, задача в операторе Создать не будет создана

Поведение вложенных операторов Ожидать

Операторы Ожидать, расположенные после первого оператора Ожидать, начинают отслеживание событий сразу после проверки условий предыдущего оператора Ожидать и операторов Если.

Такие операторы Ожидать могут сработать до завершения выполнения текущей цепочки операторов сценария, т.о. ветки сценария могут начать выполняться параллельно, например:

  • Сценарий:
    • Ожидать: создание объекта (стадия по умолчанию = А)
    • Создать: Задача
    • Изменить: стадия = Б
    • Если: стадия = Б
    • Создать: Задача
  • Поведение:
    • Создан объект
    • Выполнен запуск сценария (в контекст переданы данные объекта со стадией А)
    • Проверка условий в операторе Если выполнена сразу после оператора Ожидать (стадия = А), не дожидаясь выполнения других блоков между операторами Ожидать и Если
    • В результате условия в операторе Если не выполнены, задача в операторе Создать не будет создана

Источники данных в операторах Создать и Изменить

Операторы Создать и Изменить получают данные для заполнения полей из разных источников в зависимости от значения параметра Объект-Источник.

Совпадение объекта-источника с объектом начального оператора Ожидать:

  • Если объект-источник совпадает с объектом, указанным в операторе Ожидать, данные берутся из контекста выполнения сценария.
  • Значения фиксируются в момент начала выполнения сценария.
  • Оператор Создать 2 создает задачу и заполняет ее поля данными из объекта.
  • Поскольку сценарий был запущен по изменению объекта, данные берутся из контекста сценария, сформированного при запуске.
  • Даже если объект будет изменен позже, создаваемая задача получит значения из контекста, а не из актуальной версии объекта.

Несовпадение объекта-источника с объектом начального оператора Ожидать:

  • Если объект-источник не совпадает с объектом, указанным в операторе Ожидать, данные запрашиваются из базы данных в момент выполнения оператора.
  • Оператор Изменить 5 изменяет задачу, созданную ранее.
  • Поскольку сценарий был запущен по изменению объекта, а источник данных — Задача, данные задачи запрашиваются из базы данных в момент выполнения оператора.

Асинхронное выполнение no-code-операторов

При стандартной конфигурации системы следующие операторы выполняются асинхронно:

  • Создать.
  • Изменить.
  • Уведомить.

При выполнении оператора происходит:

  1. Постановка задачи в очередь выполнения.
  2. Продолжение выполнения сценария.
  3. Выполнение операции отдельным воркером очереди.

Оператор Создать 2 выполняется следующим образом:

  1. Оператор помещает задачу создания Задачи в очередь.
  2. Сценарий сразу продолжает выполнение.
  3. Сама задача создается позже отдельным воркером.

Таким образом создание задачи происходит асинхронно относительно выполнения сценария.

Синхронный режим выполнения no-code-операторов

Режим выполнения no-code-операторов может быть изменен с помощью значения параметра AutomationScriptsSequentialMode в файле настроек конфигурации.

Если параметр включен:

  • Операторы выполняются синхронно.
  • Следующий оператор выполняется только после завершения предыдущего.

Если у оператора указана задержка выполнения, он выполняется асинхронно.

Если параметр AutomationScriptsSequentialMode включен:

  1. Оператор Создать 2 сначала полностью создает задачу.
  2. Только после завершения создания выполняется Скрипт 3.
  3. Далее выполняются Изменить 4 и Изменить 5.

Если параметр выключен, все no-code-операторы могут выполняться асинхронно через очередь задач.