1. Обзор
В наших предыдущих статьях (основанных на API активности с Java и Spring) мы рассмотрели , как программно управлять процессами. Если мы хотим создать демо-версию вместе с пользовательским интерфейсом для активности, у нас есть два веб-приложения, которые позволят нам сделать это всего за несколько минут.
activity-app предлагает пользовательский интерфейс , с помощью которого пользователь может выполнять любые операции, связанные с управлением идентификацией и управлением задачами , создавать пользователей и группы.
Аналогично, activiti-rest – это веб-приложение, которое предоставляет API REST для выполнения любой операции над процессом, задачей , процессом и т. Д.
В этой статье мы рассмотрим, как использовать эти веб-приложения и какие функции они предоставляют.
2. Загрузки
Мы можем загрузить файлы war для обоих веб-приложений с самого веб-сайта Activity/|.
Для версии v6.0.0 мы можем просто загрузить activiti-6.0.0.zip , извлеките его, и файлы war можно найти в каталоге activity-6.0.0/wars .
3. Приложение Activiti Kickstart
Для развертывания приложения нам понадобится рабочая среда выполнения Java и установка Apache Tomcat . Любой веб-контейнер будет работать, но активность тестируется в первую очередь на Tomcat.
Теперь нам нужно просто развернуть войну на Tomcat и получить к ней доступ с помощью http://localhost:8080/activiti-app .
Домашняя страница должна выглядеть следующим образом:
3.1. База данных
По умолчанию он использует базу данных H2 в памяти. Если мы хотим изменить конфигурацию БД, мы можем проверить код и изменить файл activity-app.properties .
После этого нам нужно восстановить файл war, что можно сделать, запустив start.sh сценарий. Это позволит создать activity-app вместе с необходимыми зависимостями.
3.2. Приложение Kickstart
Когда мы нажимаем на приложение Kickstart, мы получаем опции для работы с процессом . Мы можем создавать/импортировать процессы и запускать их отсюда.
Давайте создадим небольшой процесс с одной Пользовательской задачей , который получает сообщение от пользователя. Войдя в приложение Kickstart, чтобы создать процесс, выберите вкладку Процессы и нажмите кнопку Создать процесс .:
Откроется редактор процессов, в котором мы можем перетаскивать различные символы для начальных событий, различных типов задач и конечных событий, чтобы определить Процесс.
Поскольку мы добавляем Пользовательскую задачу в наш процесс, нам нужно назначить ее кому-то. Мы можем сделать это, нажав на назначения в параметрах этой задачи и выбрав Назначенного.
Для простоты давайте назначим задачу инициатору процесса:
Мы также хотим, чтобы эта Пользовательская задача получила входное сообщение от пользователя. Чтобы достичь этого, нам нужно связать Форму, с одним текстовым полем, с этой задачей.
Выберите Пользовательскую задачу и выберите Ссылка из . В настоящее время нет Формы , связанной с задачей , поэтому нажмите Новая форма и добавьте необходимые сведения:
После этого мы перейдем в раздел Форумы , где мы сможем перетаскивать различные поля, которые мы хотим в нашей форме, а также устанавливать метки для них:
Обратите внимание, что мы поставили галочку Требуется, что означает, что задача User не может быть выполнена без ввода сообщения .
После этого мы сохраним его и перейдем на вкладку Приложения . Чтобы иметь возможность запускать созданный нами процесс, нам нужно создать приложение процесса.
В приложении “Процесс” мы можем добавить одно или несколько определений процесса . После этого нам нужно опубликовать это приложение, чтобы Процессы были доступны другим пользователям:
3.3. Приложение задач
В приложении Задач есть две вкладки: Задачи – для текущих задач и Процессы – для текущих процессов|/.
Как только мы нажмем на Start Process на вкладке Processes , мы получим список доступных процессов, которые мы можем запустить. Из этого списка мы выберем наш процесс и нажмем на кнопку пуск :
Наш процесс содержит только одну задачу, и это Пользовательская задача . Следовательно, процесс ожидает, пока пользователь выполнит эту задачу. Когда мы нажимаем на задачу, которую ожидает процесс, мы видим форму, которую мы создали:
Если мы нажмем на Показать диаграмму , она не только покажет нам диаграмму Процесса , но и выделит задачи, которые завершены, и ту, которая находится в ожидании. В нашем случае Пользовательская задача все еще находится на рассмотрении, что выделено:
Чтобы выполнить эту задачу, мы можем нажать на кнопку Complete n. Как упоминалось ранее, нам нужно будет ввести Сообщение, поскольку мы сохранили его обязательным. Следовательно, после ввода Сообщения мы можем Завершить задачу.
3.4. Приложение для управления идентификацией
Помимо управления процессом, у нас есть приложение для управления идентификацией, которое позволяет нам добавлять пользователей и группы. Мы также можем определить роли для пользователей.
4. Активный ОТДЫХ
Activity предоставляет API REST для движка Activiti , который можно установить, развернув файл activiti-rest.war в контейнер сервлетов, например Apache Tomcat.
По умолчанию механизм Activiti будет подключаться к базе данных H2 в памяти. Точно так же , как мы видели в activity-app , здесь мы можем изменить настройки базы данных в файле db.properties в папке WEB-INF/classes и воссоздать файл war.
С запущенным приложением мы можем использовать этот базовый URL-адрес для всех запросов:
http://localhost:8080/activiti-rest/service/
По умолчанию для всех ресурсов REST требуется аутентификация действительного пользователя. Базовая аутентификация доступа HTTP должна использоваться для каждого вызова REST.
4.1. Создание и запуск процесса
Чтобы создать процесс, во-первых, нам нужен файл BPMN для нашего процесса. Мы можем либо создать файл , как описано в наших предыдущих статьях, на основе действий с Java, либо его можно загрузить из раздела процесса приложения Kickstart.
Нам нужно сделать запрос POST вместе с типом контента : 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
Затем мы можем запустить этот процесс, используя ключ process , который мы упомянули в файле 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... }
Мы можем видеть диаграмму нашего запущенного процесса, используя id экземпляра процесса, возвращенного с предыдущим ответом:
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... } }
Наконец, давайте завершим эту задачу, используя задачу id 49 :
POST runtime/tasks/49
Это запрос POST, и нам нужно отправить поле action , указывающее, что мы хотим сделать с задачей. Мы можем “разрешить”, “завершить” или “удалить” задачу. Кроме того, мы можем передать массив переменных, необходимых для выполнения задачи.
В нашем случае мы должны передать поле “сообщение”, которое является текстовым полем сообщения пользователя. Таким образом, наше тело запроса является:
{ "action": "complete", "variables": [{ "name": "message", "value": "This is a User Input Message" }] }
5. Заключение
В этой статье мы обсудили, как мы могли бы использовать приложение Activiti Kickstart и предоставленный REST API.
Более подробную информацию о activiti-rest можно найти в Руководстве пользователя , а activity-app подробную информацию можно найти в документации Alfresco .