Приложение Activiti Kickstart и Activiti Rest Webapp

Приложение Activiti Kickstart и Activiti Rest Webapp

1. обзор

В наших предыдущих статьях (на основе Activiti API сJava иSpring) мы видели, как управлять процессами программно. Если мы хотим создать демо-версию вместе с пользовательским интерфейсом для Activiti, у нас есть два веб-приложения, которые позволят нам сделать это всего за несколько минут.

activiti-app offers a user interface through which a user can perform any identity management and task management related operations, создайте пользователей и группы.

Аналогичноactiviti-rest is a webapp that provides the REST API for performing any operation on a process, task, process и т. Д.

В этой статье мы рассмотрим, как использовать эти веб-приложения и какие функции они предоставляют.

2. Загрузки

Мы можем загрузить файлыwar для обоих веб-приложений из самогоActiviti Website.

Для v6.0.0 мы можем просто загрузитьactiviti-6.0.0.zip, извлечь его, и файлыwar можно будет найти в каталогеactiviti-6.0.0/wars.

3. Приложение Activiti Kickstart

Для развертывания приложения нам потребуются рабочиеJava runtime иApache Tomcat. Любой веб-контейнер будет работать, но Activiti в первую очередь тестируется на Tomcat.

Теперь нам нужно просто развернуть войну против Tomcat и получить к нему доступ с помощьюhttp://localhost:8080/activiti-app.

Домашняя страница должна выглядеть так:

image

 

 

 

 

===

 

===

3.1. База данных

По умолчанию он использует базу данных H2 в памяти. Если мы хотим изменить конфигурацию БД, мы можем проверитьcode и изменить файлactiviti-app.properties.

После этого нам нужно повторно сгенерировать файл war, что можно сделать, запустив скриптstart.sh. Это построитactiviti-app вместе с необходимыми зависимостями.

3.2. Кикстарт приложение

Когда мы нажимаем на приложение Kickstart, мы получаем параметры для работы сProcess.. Мы можем создавать / импортировать процессы и запускать их отсюда.

Давайте создадим небольшой процесс с однимUser Task, который получает сообщение от пользователя. В приложении Kickstart для создания процесса выберите вкладкуProcesses и щелкнитеCreate Process:

image

Откроется редактор процессов, в котором мы можем перетаскивать различные символы для начальных событий, различных типов задач и конечных событий, чтобы определитьProcess.

Поскольку мы добавляемUser Task в наш процесс, нам нужно назначить его кому-нибудь. Мы можем сделать это, щелкнув назначения в параметрах этой задачи и выбравAssignee.

Для простоты давайте назначим задачу инициатору процесса:

image

Мы также хотим, чтобы этотUser Task получал входное сообщение от пользователя. Для этого нам нужно связатьForm, с одним текстовым полем с этой задачей.

ВыберитеUser Task и выберитеReferenced Form. В настоящее время с задачей не связанForm, поэтому нажмитеNew Form и добавьте необходимые сведения:

image

После этого мы перейдем в разделForms, где мы можем перетаскивать различные поля, которые мы хотим в нашей форме, а также устанавливать для них метки:

image

Обратите внимание, что мы отметилиRequired,, что означает, что задачаUser не может быть завершена без вводаMessage.

После этого мы сохраним его и перейдем на вкладкуApps. Чтобы иметь возможность запустить созданный нами процесс, нам нужно создать приложение Process.

В приложении Process мы можем добавить один или несколькоProcess Definitions. После этого нам нужно опубликовать это приложение, чтобыProcesses были доступны другим пользователям:

image

3.3. Приложение задач

В приложении "Задачи" есть две вкладки:Tasks - для текущих задач иProcesses - для выполняющихся в данный моментProcesses..

После того, как мы нажмем наStart Process на вкладкеProcesses, мы получим список доступных процессов, которые мы можем запустить. Из этого списка мы выберем наш процесс и нажмем кнопкуstart:

image

Наш процесс содержит только одну задачу, и этоUser Task. Следовательно, процесс ожидает, когда пользователь выполнит эту задачу. Когда мы нажимаем на задачу, которую ожидает процесс, мы можем увидеть форму, которую мы создали:

image

Если мы нажмем наShow Diagram, он не только покажет нам диаграммуProcess, но также выделит задачи, которые завершены, и ту, которая ожидает выполнения. В нашем случаеUser Task все еще ожидает обработки, что выделено:

image

Чтобы выполнить эту задачу, мы можем щелкнуть по кнопкеCompleten.. Как упоминалось ранее, нам нужно будет ввестиMessage,, поскольку мы оставили его обязательным. Следовательно, после вводаMessage, мы можемComplete задачу.

3.4. Приложение для управления идентификацией

Помимо управления процессом, у нас есть приложение для управления идентификацией, которое позволяет нам добавлять пользователей и группы. Мы также можем определить роли для пользователей.

4. Activiti REST

Activiti provides a REST API for the 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. Базовая аутентификация доступа HTTP должна использоваться для каждого вызова REST.

4.1. Создание и запуск процесса

Для создания процесса, во-первых, нам нужен файл BPMN для нашего процесса. Мы можем либо создать файл, как описано в наших предыдущих статьях, на основеActiviti with 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

Затем мы можем запустить этот процесс, используяprocessKey, которые мы упомянули в файле 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

Как упоминалось ранее, процесс ожидает завершения пользовательской задачи, и поэтому он выделен на диаграмме:

image

4.2. Завершение задачи

Давайте теперь посмотрим на нашу незавершенную задачу, используя:

GET runtime/tasks

Ответ будет содержать список ожидающих выполнения задач. На данный момент задача одна - нашUser Task:

{
    "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 можно найти вhttps://www.activiti.org/userguide/#.rest_api[User Guide], and _activiti-app подробности можно найти вdocumentation by Alfresco.