1. Обзор
В наших предыдущих статьях (на основе Activiti API с Java и Spring) мы видели, как программно управлять процессами. Если мы хотим настроить демонстрацию вместе с пользовательским интерфейсом для Activiti, у нас есть два веб-приложения, которые позволят нам сделать это всего за несколько минут.
activiti-app
предлагает пользовательский интерфейс, через который пользователь может выполнять любые операции, связанные с управлением идентификацией и управлением задачами , создавать пользователей и группы.
Точно так же activiti-rest
— это веб-приложение, которое предоставляет REST API для выполнения любых операций с процессом, задачей, процессом и т. д.
В этой статье мы рассмотрим, как использовать эти веб-приложения и какие функции они предоставляют.
2. Загрузки
Мы можем загрузить файлы войны
для обоих веб-приложений с самого веб- сайта Activiti .
Для версии 6.0.0 мы можем просто загрузить activiti-6.0.0.zip
, распаковать его, и файлы war
можно будет найти в каталоге activiti-6.0.0/wars
.
3. Приложение Активити Кикстарт
Нам понадобится работающая среда выполнения Java и установка Apache Tomcat для развертывания приложения. Подойдет любой веб-контейнер, но Activiti в первую очередь тестируется на Tomcat.
Теперь нам нужно просто развернуть войну на Tomcat и получить к ней доступ, используя http://localhost:8080/activiti-app
.
Домашняя страница должна выглядеть так:
3.1. База данных
По умолчанию он использует базу данных H2 в памяти. Если мы хотим изменить конфигурацию БД, мы можем проверить код и изменить файл activiti-app.properties .
После этого нам нужно повторно сгенерировать файл войны, что можно сделать, запустив скрипт start.sh . Это создаст приложение activiti
вместе с необходимыми зависимостями.
3.2. Кикстарт приложение
Когда мы нажимаем на приложение Kickstart, мы получаем параметры для работы с процессом.
Мы можем создавать/импортировать процессы и запускать их отсюда.
Давайте создадим небольшой процесс с одной пользовательской задачей
, которая получает сообщение от пользователя. В приложении Kickstart для создания процесса выберите вкладку « Процессы
» и нажмите « Создать процесс
» :
Откроется редактор процессов, где мы можем перетаскивать различные символы для начальных событий, различных типов задач и конечных событий, чтобы определить процесс.
Поскольку мы добавляем пользовательскую задачу
в наш процесс, нам нужно назначить ее кому-то. Мы можем сделать это, щелкнув назначения из вариантов этой задачи и выбрав уполномоченного.
Для простоты назначим задачу инициатору процесса:
Мы также хотим, чтобы эта пользовательская задача
получала входное сообщение от пользователя. Для этого нам нужно связать форму
с одним текстовым полем с этой задачей.
Выберите Пользовательскую задачу
и выберите Ссылочная форма
. В настоящее время с задачей не связана никакая форма
, поэтому нажмите « Новая форма
» и добавьте необходимые сведения:
После этого мы попадем в раздел « Формы
», где мы можем перетаскивать различные поля, которые мы хотим в нашей форме, а также устанавливать для них метки:
Обратите внимание, что мы отметили « Обязательно»,
что означает, что пользовательская
задача не может быть завершена без ввода сообщения.
После этого мы сохраним его и перейдем на вкладку « Приложения ».
Чтобы иметь возможность запускать созданный нами процесс, нам нужно создать приложение процесса.
В приложении Process мы можем добавить одно или несколько определений процессов
. После этого нам нужно опубликовать это приложение, чтобы процессы
стали доступны другим пользователям:
3.3. Приложение задач
В приложении задач есть две вкладки: « Задачи
» — для текущих задач и « Процессы
» — для текущих процессов.
После того, как мы нажмем на вкладку « Начать процесс
» на вкладке « Процессы
», мы получим список доступных процессов, которые мы можем запустить. Из этого списка мы выберем наш процесс и нажмем кнопку запуска
:
Наш процесс содержит только одну задачу, и это задача пользователя
. Следовательно, процесс ожидает, пока пользователь выполнит эту задачу. Когда мы нажимаем на задачу, которую ожидает процесс, мы видим форму, которую мы создали:
Если мы нажмем « Показать диаграмму»
, она не только покажет нам диаграмму процесса
, но и выделит задачи, которые завершены, и те, которые ожидают выполнения. В нашем случае пользовательская задача
все еще не завершена, что выделено:
Чтобы выполнить эту задачу, мы можем нажать кнопку « Завершить
» n.
Как упоминалось ранее, нам нужно будет ввести сообщение,
так как мы сохранили его обязательным. Следовательно, после ввода сообщения
мы можем завершить
задачу.
3.4. Приложение для управления идентификацией
Помимо управления процессом, у нас есть приложение для управления идентификацией, которое позволяет нам добавлять пользователей и группы. Мы также можем определить роли для пользователей.
4. Активити ОТДЫХ
Activiti предоставляет REST API для Activiti Engine , который можно установить, развернув файл activiti-rest.war
в контейнере сервлетов, таком как Apache Tomcat.
По умолчанию Activiti Engine подключается к базе данных H2 в памяти. Так же, как мы видели в activiti-app
, здесь мы можем изменить настройки базы данных в файле db.properties в папке
WEB-INF/classes
и воссоздать файл войны.
Когда приложение запущено и работает, мы можем использовать этот базовый URL для всех запросов:
http://localhost:8080/activiti-rest/service/
По умолчанию для всех ресурсов REST требуется проверка подлинности действительного пользователя Activiti. Для каждого вызова REST следует использовать базовую аутентификацию доступа HTTP.
4.1. Создание и запуск процесса
Чтобы создать процесс, во-первых, нам нужен файл BPMN для нашего процесса. Мы можем либо создать файл, как описано в наших предыдущих статьях, на основе Activiti с Java , либо его можно загрузить из раздела «Процесс» приложения Kickstart.
Нам нужно сделать запрос POST вместе с contentType: multipart/form-data
, куда мы загрузим файл BPMN для нашего нового процесса:
POST repository/deployments
Когда мы делаем этот вызов, передавая файл BPMN для созданного нами процесса, он дает следующий результат:
{
"id": "40",
"name": "user_msg.bpmn20.xml",
"deploymentTime": "2017-10-04T17:28:07.963+05:30",
"category": null,
"url": "http://localhost:8080/activiti-rest/service/repository/deployments/40",
"tenantId": ""
}
Теперь мы можем увидеть наше определение процесса в списке, если мы получим все определения процесса:
GET repository/process-definitions
Затем мы можем запустить этот процесс, используя ключ процесса
, который мы упомянули в файле BPMN:
POST /runtime/process-instances
С этим телом запроса:
{
"processDefinitionKey":"user_msg"
}
Ответ будет:
{
"id": "44",
"url": "http://localhost:8080/activiti-rest/service/runtime/process-instances/44",
"businessKey": null,
"suspended": false,
"ended": false,
"processDefinitionId": "user_msg:1:43",
"processDefinitionUrl": "http://localhost:8080/activiti-rest/service/repository/process-definitions/user_msg:1:43",
"processDefinitionKey": "user_msg",
//other details...
}
Мы можем увидеть диаграмму нашего запущенного процесса, используя идентификатор
экземпляра процесса, возвращенный с предыдущим ответом:
GET runtime/process-instances/44/diagram
Как упоминалось ранее, процесс ожидает завершения пользовательской задачи, поэтому он выделен на диаграмме:
4.2. Завершение задачи
Давайте теперь посмотрим на нашу отложенную задачу, используя:
GET runtime/tasks
В ответе будет список ожидающих выполнения задач. На данный момент есть только одна задача — наша Пользовательская задача
:
{
"data": [
{
"id": "49",
"url": "http://localhost:8080/activiti-rest/service/runtime/tasks/49",
"owner": null,
"assignee": "$INITIATOR",
"delegationState": null,
"name": "User Input Message",
"description": "User Task to take user input",
"createTime": "2017-10-04T17:33:07.205+05:30",
"dueDate": null,
// other details...
}
}
Наконец, давайте завершим эту задачу, используя идентификатор задачи 49
:
POST runtime/tasks/49
Это запрос POST, и нам нужно отправить поле действия
, указывающее, что мы хотим сделать с задачей. Мы можем «решить», «завершить» или «удалить» задачу. Также мы можем передать массив переменных, необходимых для выполнения задачи.
В нашем случае мы должны передать поле «сообщение», которое является текстовым полем «Сообщение пользователя». Итак, наше тело запроса:
{
"action": "complete",
"variables": [{
"name": "message",
"value": "This is a User Input Message"
}]
}
5. Вывод
В этой статье мы обсудили, как можно использовать приложение Activiti Kickstart и предоставленный REST API.
Дополнительную информацию об activiti-rest
можно найти в Руководстве пользователя , а подробности об activiti-app — в
документации Alfresco .