Как установить camunda modeler
Camunda Modeler
Анатолий Опарин / август, 2018
Начало
Установка приложения. Зайти на страницу скачивания приложения (ссылка ниже). Выбрать нужную ОС и скачать. Распаковать ZIP-файл В новой папке на диске C. Запустить файл с расширением EXE. Следуя инструкциям установить Camunda Modeler. Создать ярлык на рабочем столе.
После установки приложение является по сути портабельным. Это значит, что папку с приложением можно перемещать в другое место на диске или устанавливать на другие компьютеры просто методом копирования этой папки без инсталляции.
Экспортировать работу можно в два растровых формата PNG и JPG, в векторный формат SVG, а также сохранять проект в родном xml-подобном формате BPMN.
Маленькие хитрости
Элемент действие по умолчанию не очень большой и текст даже среднего объема вместить в него красиво проблематично. Камунда не позволяет в визуальном интерфейсе менять размеры этого прямоугольника.
(Иметь в виду, что при последующей попытке перетащить эту текстовую аннотацию на другую позицию, Камунда поймет, что ее обманули, и снова прилепит аннотацию к валидному с ее точки зрения элементу)
(В свежей версии 2.2.4 этой проблемы уже нет)
У таких элементов как событие, поток операций и шлюзы есть параметр Name, который часто используется при создании диаграмм в качестве комментария к своему родительскому элементу. Но Камунда его крайне ограничивает по ширине и не позволяет в визуальном редакторе его изменять. Более того, если найти по ID и изменить width у этого элемента в XML-коде (как демонстрировалось выше), то Камунда на это никак не реагирует.
Ассоциацию можно провести между действием и базой данных только однонаправленной стрелкой, а хотелось бы изобразить обмен данными с БД двунаправленной стрелкой.
Невозможно закрасить элемент каким-нибудь цветом.
Ссылки
Конкуренты
ARIS Express. Бесплатный продукт. [Страница скачивания]. После инсталляции программы она будет работать только после того, как вы пройдете процедуру регистрации в сообществе ARIS и получите логин и пароль, которые надо будет ввести во время первого запуска программы. На общем диске «p:\Функциональные Папки\04 IT Департамент\50 Distrib\03 Util\for_BPMN\ARIS_Express\» лежит портабельная версия программы.
Bizagi Modeler. Бесплатный продукт. [Страница скачивания]. Без регистрации не дадут скачать и запустить после инсталляции. Здесь лежит скачанный после регистрации инсталлятор «p:\Функциональные Папки\04 IT Департамент\50 Distrib\03 Util\for_BPMN\».
Software Ideas Modeler. Платный продукт. [Страница скачивания] триальных версий. Понравился больше предыдущих двух. Работает быстрее, решает бо́льший спектр задач.
ELMA BPM. Платный отечественный продукт. [Описание продукта] на сайте производителя. Не скачивал для тестирования, но судя по скриншотам, отзывам, основательности сайта, это достойный и удобный продукт.
Grapholite. Платный редактор деловой графики. [Обзор и скачивание бесплатной портабельной версии]. Удобнейший редактор, который имеет богатый набор готовых элементов для моделирования BPMN схем. Работает без тормозов.
MyDraw. Платный редактор деловой графики. [Обзор и скачивание бесплатной портабельной версии]. Мощный редактор, который имеет очень богатый набор готовых элементов для моделирования BPMN схем. Работает без тормозов.
Примечание: Функционал у перечисленных программы богаче, чем у Camunda, и ограничений, налагаемых нотацией, меньше. Но в Camunda создавать диаграммы нагляднее, легче, быстрее меньше вероятности нарушить нотацию. Все продукты, кроме двух последних, имеют механизмы исполнения процессов.
Упрощаем работу в Camunda Modeler с помощью плагинов
Camunda Modeler позволяет довольно легко набросать BPMN-схему процесса, перетащив элементы в рабочую область и соединив их стрелками. Далее дела обстоят немного сложнее: нужно быть очень внимательным, чтобы с первого раза для каждого элемента заполнить необходимые поля в панели свойств и не допустить ни одной ошибки. С этой точки зрения создание исполняемых BPMN-схем напоминает программирование в Блокноте.
Например, очень легко в Script Task написать скрипт на Groovy и забыть указать Script Format. Тогда по умолчанию движок попробует выполнить переданную ему строку как JUEL-код, и вряд ли мы получим ожидаемый результат.
Было бы неплохо иметь что-то вроде подсказок, на какие поля нужно обратить внимание, какое значение вписать, какие флаги отметить, и так далее в соответствии с принятыми в команде практиками. К счастью, Camunda Modeler позволяет расширять функциональность, не форкая всё приложение, а применив плагины, что мы и решили сделать.
Разберем несколько важных для нас плагинов:
BPMN Linter — статический анализатор BPMN-файлов с графическим отображением найденных ошибок. Позволяет добавить собственные правила, с помощью которых мы и справились с описанной выше болью.
Transaction boundaries — визуализация границы транзакций.
Token simulation — моделирование токена в BPMN-процессе.
А в конце статьи посмотрим, как можно создать плагин самому.
Установка
Сам по себе Camunda Modeler является Electron-приложением, а плагин представляет собой модуль Node.js.
Для установки достаточно поместить проект плагина в одну из директорий:
/Library/Application Support в macOS.
Плагины появляются в Camunda Modeler после перезапуска приложения, некоторые можно включить/выключить в меню Plugins.
BPMN Linter
Стандартные правила BPMN Linter
Условный поток (conditional-flows)
Проверяет, что из условного fork-шлюза выходит условный поток или поток по умолчанию.
Завершающее событие обязательно (end-event-required)
Проверяет, что каждый процесс и подпроцесс имеет завершающее событие.
Типизированное начальное событие в подпроцессе по событию (event-sub-process-typed-start-event)
Проверяет, что подпроцесс по событию начинается не с пустого начального события, а с типизированного, то есть с такого, которое этот подпроцесс может запустить.
Ложное соединение (fake-join)
Согласно правилу, задачи и события не должны соединять собой потоки управления, эту роль должен выполнять join-шлюз.
Имя обязательно (label-required)
У каждого элемента должно быть заполнено поле «Name».
Никаких шлюзов включающего «ИЛИ» (no-inclusive-gateway)
Во-первых, у этого шлюза сложная fork- и join-семантика (подробнее). Во-вторых, по утверждению авторов правила, поддержка шлюза, включающего ИЛИ, в Camunda Engine реализована не полностью. Кстати, на Хабре была статья про дедлок в Camunda, и там как раз был замешан inclusive gateway.
Никаких комплексных шлюзов (no-complex-gateway)
По сравнению с предыдущим правилом здесь всё гораздо прозаичнее. Комплексный шлюз не имеет строгого определения в BPMN-нотации, и поэтому BPM-движками не поддерживается в принципе.
Никаких несоединенных объектов (no-disconnected)
Объект должен быть соединен с помощью либо входящего, либо исходящего потока управления.
Никаких дублируемых потоков управления (no-duplicate-sequence-flows)
Линтер подсветит, если потоки повторяются, приводя к непреднамеренному ветвлению.
Никаких join-fork-шлюзов (no-gateway-join-fork)
За соединение должен отвечать один шлюз, за разветвление — другой.
Никаких неявных ветвлений (no-implicit-split)
Проверяет, что из задачи не исходит более одного потока. Для ветвления должны использоваться шлюзы.
Единственное пустое начальное событие (single-blank-start-event)
Проверяет, что процесс или подпроцесс имеет только одно пустое начальное событие.
Начальное событие обязательно (start-event-required)
Пустое начальное событие в простом подпроцессе (sub-process-blank-start-event)
Лишний шлюз (superfluous-gateway)
Если шлюз имеет только один вход и один выход, то он будет помечен как лишний.
Конечно же, можно добавить свои правила. То, о чем я писал ранее и чего нам не хватало: подсказки, значения полей, нужные флаги.
Одно из правил, которое мы используем и о причине существования которого упоминал в самом начале: Script Format в Script Task должен быть Groovy
Примеры других наших правил
Service Task должен иметь флаг asynchronous after
Правило повторяет смысл плагина Transaction Boundaries, только здесь мы явно указываем на необходимость проставить Asynchronous After.
Error Boundary Event должен иметь Message Variable
В Message Variable записывается сообщение исключения, которое мы обычно используем при обработке ошибки.
Теперь давайте взглянем на другие плагины из нашего списка — Transaction Boundaries и Token Simulation.
Transaction Boundaries
Token Simulation
Есть отдельные статьи, описывающие концепцию токена в BPMN. Если вкратце: токены служат для описания поведения BPMN-процесса, начальное событие выпускает токен, который обходит процесс, разделяясь на fork-шлюзах и соединяясь на join-шлюзах. Запустится ли join-шлюз, зависит от количества ожидаемых и пришедших в него токенов. Порой сложно понять, способен ли процесс завершиться, просто взглянув на него, и тут на помощь приходит плагин Token Simulation (к сожалению не поддерживает Inclusive Gateway).
Пример с параллельным шлюзом, когда схема не завершится
Join-шлюз соединяет четыре потока и запустится только в том случае, если на него придет четыре токена, но из-за XOR-шлюза всегда будет приходить только три.
Три потока, три токена — процесс дошел до конца.
Создание своего плагина
Рассмотрим создание плагина на примере расширения возможностей поиска в BPMN-схеме. Точнее, будем искать элементы не только по имени и id, но и по Java-классу если это Service Task.
В client/search-extension/index.js прописываем:
Выполняем npm run all и перезапускаем Camunda Modeler.
Заключение
В статье описаны только используемые нами плагины и не затронуты DMN-таблицы, для которых также есть полезные дополнительные фичи.
Пошаговая инструкция: делаем свой первый проект на Camunda и Kotlin
Camunda — это отличный бесплатный BPM-движок для автоматизации бизнес-процессов. В этой статье я расскажу как по шагам сделать первую заготовку проекта с использованием языка Kotlin и Camunda. Уровень сложности материала низкий — статья снабжена скриншотами и видеоверсией. Вам нужно просто пройти по инструкции.
Вот видеоверсия статьи, кому-то может быть удобнее:
Как вообще можно использовать Camunda
Camunda можно использовать в двух вариантах:
Я разбирал такой вариант подробно на видео.
Первый вариант удобнее для эксплуатации — следить нужно только за одной базой и одной камундой, но создает проблему “шумных соседей” — если кто-то из коллег сделает кривой процесс, то лягут все.
Второй способ удобнее полной независимостью, но создает сложности в администрировании и управлении задачами. Какой вариант выбирать каждая компания сама решает, но я за второй: все проблемы решаются, а вот в первом с шумными соседями ничего не сделать. И это ОЧЕНЬ больно и неприятно на проде, когда вы начинаете падать из-за коллег.
Предварительная подготовка рабочего места
Для создания первого проекта на Camunda вам потребуется:
Поставьте всё себе на компьютер,сложностей не должно возникнуть. Если возникли, то пишите в комментарии, разберемся.
Почему Kotlin и Spring(boot)
Вместо Java мы будем использовать язык Kotlin — это статически типизированный язык программирования, работающий поверх JVM. Он более лаконичный и безопасный, чем Java. И порог входа в него немного ниже, что в этом случае нам очень важно.
Еще мы будем использовать Spring — это набор библиотек для Java, которые делают жизнь проще. А Spring boot — это еще одна штука, которая делает жизнь разработчика со Spring еще проще 🙂 В ообщем, программерская магия, которая не имеет отношения к статье.
Создаем приложение
Запускаем пустую Camunda
Для запуска камунды нам нужно добавить зависимости в файл pom.xml. В этом файле хранится информация о том, какие внешние библиотеки мы используем. Добавим много библиотек — для тестирования, логирования, саму Camunda, REST интерфейсы, работа c JSON. За что отвечает каждая из библиотек понятно из названия. В итоге раздел в pom.xml должен выглядеть так:
Ждём, пока скачаются все зависимости (полоска в правом нижнем углу).
Если вы сделали всё правильно, то у вас готова чистая Camunda на Kotlin. Теперь её можно наполнять вашими бизнес-процессами, этим займемся в других статьях.
В итоге
Как вы видите, сделать подготовительную работу для последующей автоматизации на Camunda совсем не сложно. Проще, чем развернуть кластер IBM BPM. У вас получилось? Напишите о вашем опыте в статье.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Моделирование бизнес-процессов: практика использования Camunda BPM в Java разработке
ведущий Java-разработчик ростовского офиса компании Usetech
Меня зовут Евгений Тришечкин, я ведущий Java разработчик ростовского офиса компании Usetech, и сегодня хочу поделиться с вами применением Camunda BPM в Java разработке.
В рамках статьи я расскажу об основных компонентах системы управления бизнес-процессами Camunda. Покажу развертывание системы, моделирование и деплой простого процесса. А также, на примере созданного процесса, проиллюстрирую взаимодействие Java/SpringBoot приложения с Camunda.
Давайте сначала разберемся с терминологией и выясним, что же такое BPM, BPMS и BPMN.
BPM (Business process management) — концепция управления организацией, рассматривающая бизнес-процессы как особые ресурсы предприятия, непрерывно адаптируемые к постоянным изменениям, и полагающаяся на такие принципы, как понятность и видимость бизнес-процессов в организации за счет их моделирования с использованием формальных нотаций, использования программного обеспечения моделирования, симуляции, мониторинга и анализа бизнес-процессов, возможность динамического перестроения моделей бизнес-процессов силами участников и средствами программных систем.
Другими словами, BPM отвечает на вопросы, где, когда, зачем, как и какая задача выполняется и кто отвечает за ее выполнение.
BPMS (Business Process Management System) – программное обеспечение, обеспечивающее прикладную реализацию концепции BPM.
BPMN (Business Process Modeling Notation) – нотация (система графических обозначений и их описание в формате XML) бизнес-процесса.
BPMS на рынке существует великое множество, включая лидеров рынка – Oracle или IBM. Из названия понятно, что эти системы очень мощные, сильные, дорогие и подходят далеко не каждой организации, а стоимость их внедрения может начинаться от 100.000 евро и выше. Понятно, что только крупные компании могут себе позволить внедрить такую систему.
Компания Camunda Services, которая является вендором Camunda BPM, долгое время занималась консультированием организаций в области управления бизнес-процессами, но в результате создала свой продукт и начала активно его развивать.
В сети есть разные сравнения Аctivity и Camunda и, по большей части, они в пользу последней, да и список компаний, использующих камунду достаточно обширный: Deutsche Bank, Goldman Sachs Group, Тинькофф банк, Сбер, Теле 2 и т.д.
Мы все понимаем, что бизнес-процесс должен быть максимально понятным. Моделирование процессов происходит с применением нотаций (нотации — это система графических обозначений и их описание в формате XML). Нотаций существует довольно много, но самая популярная из них, конечно, текущая версия BPMN 2.0 (2.0.2 – 2014 г), которая постепенно развивается и пополняется новыми элементами.
Рассмотрим пример бизнес-процесса, описанном нотацией BPMN:
На картинке изображен процесс регистрации нового пользователя на портале, в достаточно упрощенном формате.
Здесь нарисован пул процесса и отдельными линиями – дорожки процесса. Каждая дорожка — это отдельная роль бизнес-процессов. Верхняя — это инициатор процессов, посередине – портал и внизу – ответственный за исполнение бизнес-процессов.
Зеленый кружок — стартовые события процессов, красные кружки – конечные события процессов.
Прямоугольник — задачи (=таски), которые исполняются во время жизненного цикла бизнес-процесса.
Задачи со значком шестеренок — сервисные задачи, которые не требуют участия оператора.
Задачи со значком человечка – это те задачи, которые требуют участия человека.
Данная система создана для примера и сильно упрощена, в полноценных системах присутствуют и другие элементы, шлюзы, которые реализуют ветвление, есть перехватчики событий, таймеры, и многое другое.
Что же такое Camunda BPM?
DMN – это модель принятия решения, которая представляет собой таблицу входных значений и результирующего выходного значения. Полезна в таких задачах, как принятие решения. Допустим, нужно принять решения о выдаче кредита или открытии счета и именно в этой таблице DMN вы найдете множество вводных параметров и выходной параметр, то есть результат – выдавать кредит или нет.
Компоненты CAMUNDA BPM (Community)
Давайте подробнее рассмотрим компоненты комьюнити версии Camunda:
Компоненты Camunda BPM (Enterprise)
Enterprise версия – платная, договор, тех поддержка 24\7 и в техническом плане она получше комьюнити версии. Например, появляются:
Enterprise Cockpit — расширенная версия Camunda Cockpit, содержащая в себе дополнительные функции: развертывание описаний процессов, перезапуск экземпляров процессов, расширенный поиск по экземплярам процессов, миграция экземпляров процессов между версиями.
Camunda Optimize — оптимизация и улучшение бизнес-процессов, выявление «узких мест», отчеты и «тепловые карты» процессов, все это помогает улучшить, оптимизировать и модернизировать бизнес-процессы.
Пример тепловой карты процесса
Тепловая карта показывает относительную частоту выполнения той или иной задачи в процессе. Она помогает визуализировать результат и принять решение, какой участок более нагружен и за счет каких ресурсов\действий его можно разгрузить.
Способы развертывания Camunda BPM
Как я ранее писал, Camunda BPM написана на тех. стеке Java, поэтому у нее есть много способов развертывания.
Первый и самый простой – встроенная библиотека в приложении и именно его мы будем подробно разбирать.
Второй способ тоже подходит для Java приложений — сервис внутри сервера приложений или контейнера сервлетов («расшаренный» сервис), который могут использовать другие приложения, развернутые в контейнере.
Третий способ, если приложения написаны не на Java, развернуть Camunda как отдельно стоящий сервер и приложение будут с ним контактировать по Rest API удаленно.
Четвертый способ для высоконагруженных систем — кластерное развёртывание для высоконагруженных систем, когда есть общая база данных и несколько нод с камундой.
Практическая часть – пробуем Camunda своими руками
Внутри мы видим один класс Application — @SpringBootApplication, как я и писал ранее, камунда хорошо интегрируется со SpringBoot. А также в проекте есть файл с настройками приложения и файл с описанием процесса в формате BPM.
Процесс состоит из следующих этапов: стартовое событие, пользовательская задача, конечное событие. Пользовательская задача, самая простая, выглядит так: пользователь открыл задачу, нажал – завершить задачу и процесс завершился.
Но давайте немного усложним задачу и внесем изменения в процесс. Процесс мы сделаем процессом регистрации пользователя на портале, тот пример, о котором мы говорили в начале статьи и к которому обещал вернуться. Для этого нам нужно изменить стартовое событие и добавить туда переменную «username», которая добавляется через Camunda Modeler (кросс-платформенное решение, скачивается с официального сайта, бесплатное)
В результате у нас получилось модифицировать стартовое событие. Дальше необходимо модифицировать пользовательскую задачу, тут же добавляем форму с именем пользователя. Причем имя пользователя мы делаем «read only», чтобы тот человек, который будет утверждать создание нового пользователя не мог изменить его имя. А также добавляем переменную «decision», которая позволяет утвердить или отклонить эту регистрацию.
Запускаем экземпляр процесса. Для запуска экземпляра процесса заходим в приложение Camunda Tasklist (веб-приложение, через которое конечные пользователи могут зайти, посмотреть какие задачи на них назначены и выполнить какие-то действия) и нажимаем «Запустить процесс».
Находим свой демо процесс, который мы создали и видим форму запуска процесса.
После этого появляется окошко для ввода имени пользователя (переменная username), заполняем его и запускаем процесс.
Процесс запущен, и мы видим, что на пользователя Demo упала задача. Задача, как и ожидается называлась отклонить или утвердить регистрацию. Выделяем ее и видим форму, которую мы создавали. Также мы видим имя пользователя, которое нельзя редактировать, а решение – можно. Завершаем задачу, нажав кнопку «Complete» и на этом процесс завершается.
Давайте добавим немного экшена в процесс и усложним задачу – создадим ветвления.
Для этого добавляем к существующему процессу — шлюз, который будет «ветвить» этот алгоритм:
И также создаем конечное событие. В результате у нас появляются два сервисных таска: создать нового пользователя и отправить уведомление. Сервисные таски, как я уже писал ранее, это таски, которые не требуют участия оператора в их выполнении. Следовательно, в них должна быть заложена логика и здесь мы покажем простой способ взаимодействия с Java кодом.
Выделяем модуль или сервисный таск и в нем прописываем implementation, выбирая способ Delegate Expression и добавляем в Delegate Expression собственное имя. Собственно этот бин нам и нужно создать в коде.
Аналогично поступим в другим сервисным таском – отправить уведомление.
Также пропишем Delegate Expression, добавляем ему имя бина «notifyUser» и создаем соответствующий компонент, реализующий JavaDelegate в коде.
Вот этот способ через DelegateExecution работает только в случае с Java приложениями.
Возникает вопрос: а что делать, если приложение не на Java или если Camunda развернута на отдельном сервер?
В этом случае выбираете способ имплементации не Delegate Expression, а External и просто указываете какой-то топик, куда будет отправлен месседж и, соответственно, через очереди будет делегироваться выполнение в ваш код.
Последний шаг – запустить все то, что мы создали. Вводим имя
Видим таск «утвердить\отклонить регистрацию». Допустим, мы отклоняем регистрацию. Тогда не ставим галочку в поле «Утвердить?» и нажимаем «Complete».
После этого переходим в логи и видим, что пользователю Дарт Вейдер отказано в регистрации
Если мы принимаем регистрацию, то ставим галочку в поле «Утвердить?» и нажимаем «Complete». В этом случае процесс исполняется по другой ветке и в логах отображается по-другому.
Вместо вывода
Выше я описал самую простую схему процесса. В реальности же системы намного сложнее с множественными ветвлениями, а в эти диаграммы BPM можно вставлять другие таски, которые могут реализовать нотации DMN.
Camunda не позиционирует себя как low-code или no-code система. Camunda позиционирует себя как систему, где должно быть разумное сочетание, своеобразный симбиоз, между бизнесом, аналитиками и разработкой.