Перейти к основному содержимому

Управление рабочими процессами (Workflow Management)

Общее

Pimcore Workflow Management предоставляет возможность конфигурирования нескольких рабочих процессов для элементов Pimcore (assets, documents, data objects) с целью поддержки процессов сопровождения данных, жизненных циклов элементов и прочих сценариев.

Система основана на компоненте Symfony Workflow и расширена рядом специфичных для Pimcore возможностей. Поэтому перед использованием имеет смысл ознакомиться с базовыми понятиями Symfony Workflow.

Понятия

Workflow Workflow — это модель процесса, через который проходит элемент в Pimcore. Он состоит из мест (places), переходов (transitions), хранилища состояний (marking store), глобальных действий (global actions) и нескольких дополнительных опций конфигурации. Один элемент может одновременно участвовать в нескольких workflow.

Тип workflow 'Workflow' Тип workflow с именем workflow описывает стандартный тип рабочих процессов и позволяет моделировать сеть workflow, являющуюся частным случаем сети Петри. Такой workflow моделирует процесс элемента и допускает нахождение элемента в нескольких местах одновременно.

Тип workflow 'State Machine' State machine — это подмножество workflow, предназначенное для хранения одного состояния модели. Главное ограничение: state machine не может находиться более чем в одном месте одновременно. Для получения более подробной информации смотрите также документацию Symfony.

Place (место) Place — это шаг в workflow, описывающий характеристику или статус элемента — например: в работе, атрибуты продукта заданы, права авторства указаны, элемент готов к публикации и т. п. В зависимости от места элемент может отображаться в специальном виде (например, кастомный layout для data objects) и иметь определённые особые права (например, завершённые (finished) элементы нельзя изменять).

Marking Store (хранилище состояний) Marking store хранит текущее место/места для каждого элемента. В Pimcore доступны несколько реализаций хранилищ, которые настраиваются в конфигурации workflow.

Transition (переход) Transition описывает действие, переводящее элемент из одного места в другое. Разрешение перехода может зависеть от дополнительных критериев (transition guards) и может требовать ввода пользователем заметок или прочей информации.

Transition Guard (критерии перехода) Guard определяет критерии, по которым определяется, разрешён ли переход в текущий момент.

Global Action (глобальное действие) В отличие от переходов, которые доступны только когда элемент находится в определённом месте, глобальные действия доступны из любого места. По сути они очень похожи на переходы, но не ограничены местом.

Конфигурация

Конфигурирование workflow происходит в дереве конфигурации Symfony в пространстве имён Pimcore. Для описания доступных опций смотрите встроенные комментарии и документацию (выполните команду bin/console config:dump-reference PimcoreCoreBundle) или раздел Подробности конфигурации.

События

Pimcore Workflow Management генерирует несколько событий, которые можно использовать для кастомизации и расширения функциональности. Для деталей см. раздел Работа с PHP API.

Уведомления пользователям

Можно настроить уведомления (по электронной почте или через Pimcore notifications), которые будут отправляться пользователям при выполнении перехода. Для этого в секции options определения transition укажите массив пользователей или ролей, которым нужно отправлять уведомления.

Указание роли означает отправку уведомления всем пользователям с этой ролью

...  
transitions:
myTransition:
options:
notificationSettings:
-
# Здесь можно настроить symfony expression. Будут использоваться все наборы уведомлений, которые соответствуют условию.
condition: "" # необязательное условие, при выполнении которого применяется эта настройка уведомлений

# Отправить email указанным пользователям (имена пользователей), когда переход будет применен
notifyUsers: ['admin']

# Отправить email указанным ролям пользователей (названия ролей), когда переход будет применен
notifyRoles: ['projectmanagers', 'admins']

# Определите канал доставки уведомления, возможные значения "mail" и "pimcore_notification", значение по умолчанию - "mail".
channelType:
- mail
- pimcore_notification

# Тип источника письма
mailType: 'template' # по умолчанию 'template'. Допустимые значения: "template", "pimcore_document"

# Путь к шаблону письма (Symfony path) или полный путь до Pimcore Document.
# Можно использовать плейсхолдер %%_locale%% для языка.
mailPath: '@PimcoreCore/Workflow/NotificationEmail/notificationEmail.html.twig' #это значение
...

Множество настроек уведомлений с указанием условий позволяют настраивать сложные уведомления для каждого перехода. Для настройки шаблона e‑mail доступны следующие опции:

  • Переопределить шаблон @PimcoreCore/Workflow/NotificationEmail/notificationEmail.html.twig либо указать собственный путь к шаблону в настройках. В шаблоне по умолчанию доступны параметры subjectType, subject, action, workflow, workflowName, deeplink, note_description, translator, lang. Если требуются дополнительные параметры, переопределите сервис Pimcore\Workflow\Notification\NotificationEmailService.
  • Настроить и воспользоваться всем функционалом Mail Documents (Controller, Action, плейсхолдеры и т. д.). В Mail Document доступны те же параметры, что и в шаблоне.
  • При необходимости более сложных уведомлений реализуйте кастомные слушатели событий (event listeners).

История workflow

Вкладка "Notes & Events" содержит список всех действий, выполненных над объектом через модуль Workflow.

Notes & Events - заметки из рабочего процесса

Обзор workflow

Если для элемента Pimcore настроены workflow, на странице детального просмотра элемента появится дополнительная вкладка с информацией о workflow: все настроенные workflow, их текущие места и граф workflow.

Обзор workflow

Для отображения графа требуется установленная в системе утилита graphviz как дополнительное системное требование.


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.