Страница предназначена для администраторов, внедренцев и разработчиков. Прикладное описание настройки — на странице Автоматизация.
Компоненты
| Компонент | Роль в автоматизации |
|---|---|
| Портал (основное приложение) | Хранит элементы и настройки автоматизации (списки «Автоматизация», «Автоматизация (условия)», «Автоматизация (действия)»). При сохранении элемента определяет изменённые атрибуты, находит подходящие правила и передаёт их на выполнение в движок. |
| Workflows (модуль портала) | Мост между порталом и движком. Создание и запуск экземпляров процессов, формирование вложений, маршрута и задач, обработка решений по вложениям, расчёт статусов согласования, отправка в движок сигналов о завершении задач и команд на отмену экземпляра процесса при завершении/прерывании. |
| Workflow.Manager (отдельное приложение) | Движок рабочих процессов на базе Elsa 2.13 (хранилище — PostgreSQL). Динамически собирает процесс (definition) из действий сработавших правил и выполняет его. Содержит обработчики (activity) для каждого типа действия. |
| Mail (модуль портала) | Формирование писем по шаблонам Telerik Reporting и отправка по SMTP. Используется движком через API (действие «Отправить оповещение»), но доступен и другим модулям. |
| Stamp (модуль портала) | Нанесение штампов и QR-кодов на PDF, вставка пустых страниц, экспорт/импорт замечаний. Используется движком через API (действия «Добавить штамп», «Добавить пустую страницу»), а также другими функциями портала. |
Общая схема взаимодействия
Пользователь / действие системы
│ сохранение элемента (создание или изменение атрибутов)
▼
┌─────────────────────────── ПОРТАЛ ───────────────────────────┐
│ 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(если атрибут есть у типа элемента). - Экземпляр запускается. Если выполнение завершилось с ошибкой, ошибка возвращается вызывающей стороне.
Ограничение
Переменная stage одна на definition. Если в одну цепочку попадут два действия «Создать этап процесса», оба этапа будут использовать параметры последнего из них. Настраивайте не более одного действия «Создать этап процесса» на одно событие (один статус).
Выполнение действия
Обработчики большинства типов действий наследуют общий алгоритм (базовая activity):
Для каждого действия цепочки (в порядке правил и поля «Порядок»):
1. Элемент-триггер = элемент, на котором произошло событие (переменная itemId)
2. Если НЕ все условия правила действия вернули Истина -> действие пропускается
3. Исходные элементы = результат формулы «Исходный элемент(ы) (формула)»
либо [элемент-триггер], если поле отсутствует/пустое
4. Для каждого исходного элемента (в отдельной транзакции, от имени системы):
выполнить обработчик типа действия
5. Перейти к следующему действию (исход Done)
- Все действия выполняются от имени системного администратора. Права пользователя, инициировавшего событие, не проверяются.
- Изменения, сохранённые действием, порождают новые события, которые обрабатываются синхронно (вложенные цепочки) до перехода к следующему действию.
- Ошибка в обработчике прерывает выполнение цепочки: последующие действия не выполняются.
- Исключения из общего алгоритма: «Создать этап процесса» (встраиваемый шаблон, условия не проверяются) и служебные 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 портала, вызываемые движком
| Метод | Модуль | Вызывается действием |
|---|---|---|
POST mail/api/mail/send/{templateId} | Отправить оповещение | |
POST stamp/api/stamp/add/{itemId}/{actionId} | Stamp | Добавить штамп |
POST stamp/api/page/add/{itemId}/{actionId} | Stamp | Добавить пустую страницу |
Адрес портала для этих вызовов берётся из параметра конфигурации локального адреса портала; адрес, подставляемый в письма, — из параметра публичного адреса портала.
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, наличие связей нужного типа для действий со связанными объектами.
Порядок правил в цепочке
Состав и порядок правил внутри группы определяет сервис правил портала. Если последовательность действий разных правил критична, размещайте зависимые действия в одном правиле или разносите их по разным событиям (например, через промежуточный статус). УТОЧНИТЬ