Какие есть неочевидные особенности выполнения сценариев автоматизации? Что необходимо учитывать при добавлении сценария?
Предусмотрены неочевидные особенности выполнения сценариев автоматизации, которые необходимо учитывать при их проектировании и использовании, касающиеся:
- Синхронности и асинхронности выполнения операторов.
- Порядка выполнения операторов сценариев.
- Источников данных при выполнении операторов.
- Взаимодействия сценариев между собой.
Разбор особенностей выполнения сценариев автоматизации выполняется на следующем примере сценария автоматизации:
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-операторов
При стандартной конфигурации системы следующие операторы выполняются асинхронно:
- Создать.
- Изменить.
- Уведомить.
При выполнении оператора происходит:
- Постановка задачи в очередь выполнения.
- Продолжение выполнения сценария.
- Выполнение операции отдельным воркером очереди.
Оператор Создать 2 выполняется следующим образом:
- Оператор помещает задачу создания Задачи в очередь.
- Сценарий сразу продолжает выполнение.
- Сама задача создается позже отдельным воркером.
Таким образом создание задачи происходит асинхронно относительно выполнения сценария.
Синхронный режим выполнения no-code-операторов
Режим выполнения no-code-операторов может быть изменен с помощью значения параметра AutomationScriptsSequentialMode в файле настроек конфигурации.
Если параметр включен:
- Операторы выполняются синхронно.
- Следующий оператор выполняется только после завершения предыдущего.
Если у оператора указана задержка выполнения, он выполняется асинхронно.
Если параметр AutomationScriptsSequentialMode включен:
- Оператор Создать 2 сначала полностью создает задачу.
- Только после завершения создания выполняется Скрипт 3.
- Далее выполняются Изменить 4 и Изменить 5.
Если параметр выключен, все no-code-операторы могут выполняться асинхронно через очередь задач.