Получение параметров запуска wf из роутера
В модуле реализован обработчик события workflow.dispatch.metadataWorkflowToRun.
Это обработчик позволяет получить параметры для запуска wf из роуетера.
Описание работы RouteHandler
Для запуска workflow необходимы следующие данные:
- managerName - имя менеджера workflow
- actionName - имя выполняемого действия (тег action в xml файле workflow)
Имя менеджера workflow может быть получено на основе псевдонима (managerAlias).
Для запуска нового процесса workflow: * name - имя зарегестрированного workflow (по сути ссылка на xml файл workflow, регистрируется в менеджере workflow)
Для изменения состояния уже запущенного процесса: * entryId - id запущенного процесса workflow
Все эти данные должны передоваться в качестве параметров роутера. По умолчанию, ожидается что параметры роутера будут иметь следующие значения
Параметр | Имя параметра роутера | Описание |
---|---|---|
managerName | workflowManagerName | имя менеджера workflow |
managerAlias | workflowManagerAlias | псевдоним менеджера workflow |
actionName | workflowActionName | имя выполняемого действия |
name | workflowName | имя зарегестрированного workflow |
entryId | entryId | id запущенного процесса |
Если возникает потребность, в других именах параметров роутера, то можно использовать анотацию.
@WFD\RunWorkflowParamFromRoute(managerName="workflowManagerCustomName", actionName="workflowActionCustomName", name="workflowCustomName", entryId="customEntryId")
Для использования анотации необходимо убидеться что подключено в use соответствующее пространство имен:
use OldTown\Workflow\ZF2\Dispatch\Annotation as WFD;
Алгоритм работы \OldTown\Workflow\ZF2\Dispatch\RunParamsHandler\RouteHandler
- Проверяется что удалось получить workflowManagerName и workflowActionName. Если нет то прекращаем работу
- Если тип действия workflow - initialize и удалось из значения параметров роуета получить workflowName. Отдаем данные для запуска wf
- Если тип действия workflow - doAction - то бросаем событие workflow.dispatch.resolveEntryId(\OldTown\Workflow\ZF2\Dispatch\RunParamsHandler\RouteHandler\ResolveEntryIdEvent)
- В модуле реализован обработчик workflow.dispatch.resolveEntryId. Если удалось получить из значения параметра роутера entryId, возвращаем его
- Как только хотя бы один из обработчиков вернул entryId, отдаем данные для запуска wf, в противном случае завершаем работу.
В случае если необходимо получить значение entryId, не на основе явно указанного значения через роутера, а иным способом. Например на основе id сущности привязанной к процессу, необходимо реализовать обработку собтыия workflow.dispatch.resolveEntryId, для сервиса \OldTown\Workflow\ZF2\Dispatch\RunParamsHandler\RouteHandler