Camunda: Развертывание форм и бизнес-правил совместно с описанием процесса

Всем привет!

Выполняя обещания, данные в новогодней рассылке, мы начинаем публикацию заметок, посвященных Camunda BPM. Сегодня речь пойдет о развертывании форм и описаний бизнес-правил (DMN) совместно с описанием процесса.

Camunda Forms and Business Rules Deployment

Существуют различные способы развертывания описания процесса в движок Camunda BPM. Классический способ представляет собой настройку Maven-проекта, размещение модели процесса в src/main/resources, сборку и последующий деплой WAR-приложения на сервере приложений. Этот способ подробно описан в Camunda Docs и вполне понятен любому разработчику Java.

Начиная с версии 1.12 Camunda Modeler, появилась возможность настроить точку подключения (Deployment Endpoint) и развернуть процесс непосредственно из моделера.

Camunda Modeler configure deployment endpoint

Отчасти это решило проблему развертывания процесса "на лету" и сохранило кучу времени архитектору бизнес-процесса. Однако, при необходимости развернуть вместе с процессом пользовательские формы (embedded forms) или DMN-модели, приходилось либо прибегать к помощи разработчика (см. выше), либо использовать Enterprise-версию Cockpit'a (где эта возможность доступна "из коробки").

К счастью, существует замечательный механизм REST API, позволяющий развертывать как описания процессов, так и вспомогательные файлы при помощи HTTP.

В Form Key для User Task (вкладка Forms) необходимо указать способ развертывания и имя формы:

    embedded:deployment:YOUR_FORM_NAME.html

Camunda Modeler Form Deployment

Для DMN-моделей следует выбрать Binding: deployment.

Camunda Modeler DMN binding: deployment

Нужные HTTP-запросы выполняются при помощи утилиты curl. Ранее мы использовали ее в процессе нагрузочного тестирования OTRS. В MacOS и любой Linux-системе эта утилита доступна out-of-box или легко устанавливается из репозитория. Существует также порт curl для Windows. Развертывание выполняется в два этапа.

Первый этап - авторизация в Cockpit и сохранение полученных cookie в файл. Далее, используя cookie (JSESSIONID), необходимо загрузить описание процесса и вспомогательные файлы (формы, DMN-модели). Ниже приведен пример shell-скрипта, загружающего описание процесса (файл PROCESS.bpmn) совместно с формами (step-*.html) и бизнес-правилами (*.dmn).

#!/bin/sh

curl -w "\n" \
--cookie-jar ./cookie \
-H "Accept: application/json" \
-d "username=USERNAME" \
-d "password=PASSWORD" \
https://CAMUNDA_HOST:8080/camunda/app/cockpit

curl -w "\n" \
--cookie ./cookie \
-H "Accept: application/json" \
-F "deployment-name=DEPLOYMENT_NAME" \
-F "enable-duplicate-filtering=false" \
-F "deploy-changed-only=falses" \
-F "PROCESS.bpmn=@PROCESS.bpmn" \
-F "step1-1.dmn=@step1-1.dmn" \
-F "step1-2.dmn=@step1-2.dmn" \
-F "step1-3.dmn=@step1-3.dmn" \
-F "step1-1.html=@step1-1.html" \
-F "step1-2.html=@step1-2.html" \
-F "step1-3.html=@step1-3.html" \
-F "step1-4.html=@step1-4.html" \
-F "step1-5.html=@step1-5.html" \
-F "step1-6.html=@step1-6.html" \
https://CAMUNDA_HOST:8080/engine-rest/deployment/create

Проверяем корректность загруженного описания процесса в Camunda Cockpit.

Camunda Cockpit Deployment

Описанный выше подход к загрузке описания работает в Camunda BPM версии 7.8 - 7.10. Синтаксис команд утилиты curl может отличаться в зависимости от версий утилиты и операционной системы.