| Info |
|---|
Страница предназначена для администраторов, внедренцев и разработчиков. Прикладное описание настройки — на странице Автоматизация (new). |
Компоненты
| Компонент | Роль в автоматизации |
|---|
| Портал (основное приложение) | Хранит элементы и настройки автоматизации (списки «Автоматизация», «Автоматизация (условия)», «Автоматизация (действия)»). При сохранении элемента определяет изменённые атрибуты, находит подходящие правила и передаёт их на выполнение в движок. |
| Workflows (модуль портала) | Мост между порталом и движком. Создание и запуск экземпляров процессов, формирование вложений, маршрута и задач, обработка решений по вложениям, расчёт статусов согласования, отправка в движок сигналов о завершении задач и команд на отмену экземпляра процесса при завершении/прерывании. |
| Workflow.Manager (отдельное приложение) | Движок рабочих процессов на базе Elsa 2.13 (хранилище — PostgreSQL). Динамически собирает процесс (definition) из действий сработавших правил и выполняет его. Содержит обработчики (activity) для каждого типа действия. |
| Mail (модуль портала) | Формирование писем по шаблонам Telerik Reporting и отправка по SMTP. Используется движком через API (действие «Отправить оповещение»), но доступен и другим модулям. |
| Stamp (модуль портала) | Нанесение штампов и QR-кодов на PDF, вставка пустых страниц, экспорт/импорт замечаний. Используется движком через API (действия «Добавить штамп», «Добавить пустую страницу»), а также другими функциями портала. |
Общая схема взаимодействия
| Code Block |
|---|
| language | text |
|---|
| title | Поток событий |
|---|
|
Пользователь / действие системы
│ сохранение элемента (создание или изменение атрибутов)
▼
┌─────────────────────────── ПОРТАЛ ───────────────────────────┐
│ 1. Определение изменённых атрибутов │
│ 2. Поиск правил в списке «Автоматизация» (automation): │
│ Тип элемента + Атрибут + [Значение] │
│ 3. Группировка сработавших правил по событию │
└───────────────┬──────────────────────────────────────────────┘
│ POST api/workflow/Execute/{itemId}
│ { "itemIdList": [ <ID правил автоматизации> ] }
▼
┌────────────────── WORKFLOW.MANAGER (Elsa 2.13) ──────────────┐
│ 4. Сборка definition «automationWorkflow_<ТЭ>_<значение>» │
│ из действий (automation_action) всех правил группы │
│ 5. Создание и запуск экземпляра процесса Elsa │
│ 6. Выполнение activity по порядку: │
│ проверка условий (automation_condition) → действие │
│ ├─ изменения элементов → новые события → вложенные цепочки│
│ ├─ Этап процесса → задачи → ожидание (bookmark) │
│ ├─ Отправить оповещение ──► Портал: модуль Mail (API) │
│ └─ Штамп / пустая страница ► Портал: модуль Stamp (API) │
└───────────────▲──────────────────────────────────────────────┘
│ POST api/workflow/SendSignalTaskClosed/{taskId}
│ POST api/workflow/Abort/{workflowInstanceId}
┌───────────────┴───── ПОРТАЛ: модуль Workflows ───────────────┐
│ • запуск процесса, маршрут, задачи, решения по вложениям │
│ • сигнал «задача завершена» при переходе задачи в «Завершена» │
│ • при завершении процесса: права → только чтение, отмена │
│ экземпляра Elsa │
└──────────────────────────────────────────────────────────────┘ |
Модель данных правил
Правило автоматизации (список «Автоматизация», automation)
Элемент списка создаётся с типом «Изменено значение атрибута (правило автоматизации)». Основные атрибуты:
| Атрибут | Назначение |
|---|
| Название | Произвольное наименование правила. Рекомендуемый формат: <Тип элемента>_<суть правила>. |
| Тип элемента | Тип элемента, события которого отслеживает правило. |
| Тип действия | Тип действий, которые можно привязать к правилу. К одному правилу привязываются действия только одного типа. |
| Атрибут | Атрибут, изменение которого является триггером. |
| Значение (строка) | Идентификатор (GUID) значения атрибута, при котором срабатывает правило (например, значения статуса). Если не заполнено — правило срабатывает при любом изменении атрибута (одиночный триггер). |
Условия (список «Автоматизация (условия)», automation_condition)
- Каждое условие ссылается на правило (атрибут «Автоматизация») и имеет «Порядок».
- Поддерживаемый тип условия — «Формула». Условия других типов движком игнорируются (считаются выполненными).
- Все условия правила объединяются по «И».
Действия (список «Автоматизация (действия)», automation_action)
- Каждое действие ссылается на правило (атрибут «Автоматизация») и имеет «Порядок», задающий последовательность выполнения.
- Тип элемента действия определяет обработчик (activity), который его выполнит. Соответствие типов и обработчиков приведено на странице Типы автоматических действий .
Формирование процесса (definition) в Elsa
- Портал передаёт в Workflow.Manager идентификатор элемента-триггера и список идентификаторов правил, сработавших на одно событие.
- Имя definition формируется по шаблону
automationWorkflow_<Название типа элемента>_<Название значения> с транслитерацией (для одиночных правил часть «значение» пустая). Имя берётся по первому правилу группы; для одного события существует одно definition, которое пересобирается при каждом срабатывании (список activity и связей очищается и формируется заново). - Для каждого правила группы действия выбираются в порядке поля «Порядок» и добавляются в definition последовательно, соединяясь исходом
Done. Идентификатор activity: <№ правила>_<Обработчик>_automation_<ID правила>_action_<ID действия>_<GUID>, отображаемое имя — «Название» действия. - Действие «Создать этап процесса» не добавляется как одна activity: в цепочку встраиваются все activity шаблона этапа (definition Elsa, указанное в поле «Шаблон процесса» по его внутреннему имени). Шаблон обязан содержать activity
ForEach; activity, подключённая к исходу Done цикла, считается финальной точкой этапа, к ней присоединяется следующее действие цепочки. - В переменные definition записываются:
itemId — элемент-триггер; stage — параметры этапа (ID действия и вычисленный список исполнителей); stampProfile — профиль штампа текущего этапа процесса (для штампа по профилю этапа). - Создаётся экземпляр процесса (режим сохранения — при приостановке,
Suspended), его идентификатор записывается в атрибут элемента elsa_workflow_id (если атрибут есть у типа элемента). - Экземпляр запускается. Если выполнение завершилось с ошибкой, ошибка возвращается вызывающей стороне.
| Note |
|---|
|
Переменная stage одна на definition. Если в одну цепочку попадут два действия «Создать этап процесса», оба этапа будут использовать параметры последнего из них. Настраивайте не более одного действия «Создать этап процесса» на одно событие (один статус). |
Выполнение действия
Обработчики большинства типов действий наследуют общий алгоритм (базовая activity):
...
- Все действия выполняются от имени системного администратора. Права пользователя, инициировавшего событие, не проверяются.
- Изменения, сохранённые действием, порождают новые события, которые обрабатываются синхронно (вложенные цепочки) до перехода к следующему действию.
- Ошибка в обработчике прерывает выполнение цепочки: последующие действия не выполняются.
- Исключения из общего алгоритма: «Создать этап процесса» (встраиваемый шаблон, условия не проверяются) и служебные activity шаблона этапа.
Этап процесса и ожидание задач
- activity «Добавить узел маршрута» создаёт (или находит) узел маршрута текущего этапа — этап определяется атрибутом «Этап процесса» (
workflow_step), а при его отсутствии — «Статус процесса». - Цикл
ForEach по списку исполнителей вызывает activity «Создать задачу»: создаётся задача, к ней привязываются все вложения процесса связью «вложение задачи на согласование», назначаются права. - activity ожидания завершения задач (
TaskClosedActivity) создаёт закладки (bookmark) по идентификаторам задач, и экземпляр процесса Elsa переходит в состояние Suspended. - Когда исполнитель завершает задачу (статус задачи — «Завершена»), модуль Workflows портала отправляет в движок
POST api/workflow/SendSignalTaskClosed/{taskId}. Движок возобновляет экземпляр, переводит завершённую задачу в режим «только чтение» и проверяет, все ли задачи этапа завершены. - Когда завершены все задачи, рассчитывается статус согласования этапа (единый статус задач или «частично согласовано» при расхождении), и цепочка продолжается следующими действиями.
Завершение процесса
- Процесс считается завершённым, когда «Статус процесса» принимает значение «Завершен» или «Прерван».
- При переходе в такой статус модуль Workflows переводит права на процесс в режим «только чтение» и отправляет в движок
POST api/workflow/Abort/{elsa_workflow_id} — ожидающий экземпляр Elsa отменяется, его закладки удаляются. - При прерывании процесса инициатором (или администратором) незавершённые задачи текущего этапа удаляются, вложениям восстанавливается статус, который был до запуска (атрибут «Предыдущий статус документа», если он есть у типа файла).
REST API
Workflow.Manager
| Метод | Назначение |
|---|
POST api/workflow/Execute/{itemId} тело: {"itemIdList": ["<ID правила>", ...]} | Собрать и выполнить цепочку правил для элемента. |
POST api/workflow/SendSignalTaskClosed/{taskId} | Сигнал о завершении задачи этапа. |
POST api/workflow/Abort/{workflowInstanceId} | Отменить экземпляр процесса Elsa. |
POST api/workflow/SendSignal/{signalName} | Отправить произвольный сигнал Elsa. |
Доступ к API и к панели Elsa Dashboard (открывается по базовому пути приложения) возможен только с действующим токеном сессии пользователя портала; движок обращается к порталу с токеном системного пользователя.
API портала, вызываемые движком
Адрес портала для этих вызовов берётся из параметра конфигурации локального адреса портала; адрес, подставляемый в письма, — из параметра публичного адреса портала.
API модуля Workflows
| Метод | Назначение |
|---|
POST workflow/api/workflow/CreateNewInstance/{actionId} | Создать черновик процесса по действию запуска (с вложениями по тем же правилам фильтрации типов и статусов). |
POST workflow/api/workflow/Start/{itemId} | Запустить процесс: права инициатора и наблюдателей, маршрут, перевод в «Инициализация» (или в первый этап шаблона этапов). |
POST workflow/api/workflow/AutoStart/{actionId} | Создать и сразу запустить процесс (автоматический запуск). |
POST workflow/api/workflow/Break, Break/{workflowId} | Прервать процесс(ы). |
POST workflow/api/workflowtask/Finish/{itemId} | Завершить задачу с расчётом статуса согласования. |
POST workflow/api/workflowtask/SetReferenceApprovalStatus/{itemId}/{approvalStatusId} | Установить решение по всем вложениям задачи. |
Конфигурация
| Файл | Параметры | Назначение |
|---|
workflow.json | ConnectionString, BaseUrl, BasePath | Подключение Workflow.Manager к PostgreSQL и адрес движка для портала. Если ConnectionString пуст, портал считает движок отключённым и не отправляет сигналы о завершении задач и команды отмены. |
mail.json | Host, Port, Login, Password, FromAddress, FromName, SecureSocketOptions | Параметры SMTP модуля Mail. Если файла нет или не задан Host, письма не отправляются (без ошибки). См. Настройка шаблонов оповещений . |
Диагностика
- Экземпляры процессов и их журнал выполнения доступны в Elsa Dashboard приложения Workflow.Manager; идентификатор последнего экземпляра хранится в атрибуте
elsa_workflow_id элемента. - Definition каждого события называется
automationWorkflow_... — по имени удобно найти, какие действия и в каком порядке попали в цепочку. - Если действие «не срабатывает», проверьте: условия правила (в контексте элемента-триггера), наличие изменяемого атрибута у типа целевого элемента (иначе действие пропускается без ошибки), расширение файла для действий с PDF, наличие связей нужного типа для действий со связанными объектами.
...