«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. Приложение Activiti Kickstart

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

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

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

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

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

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

3.2. Приложение Kickstart

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

Давайте создадим небольшой процесс с одной пользовательской задачей, которая получает сообщение от пользователя. В приложении Kickstart, чтобы создать процесс, выберите вкладку «Процессы» и нажмите «Создать процесс»:

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

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

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

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

Выберите Пользовательскую задачу и выберите Ссылочную форму. В настоящее время с задачей не связана никакая форма, поэтому нажмите «Новая форма» и добавьте необходимые данные:

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

Обратите внимание, что мы отметили пункт «Обязательно», что означает, что пользовательская задача не может быть завершена без ввода сообщения.

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

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

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

В приложении задач есть две вкладки: «Задачи» — для текущих задач и «Процессы» — для текущих процессов.

Как только мы нажмем на вкладку «Начать процесс» на вкладке «Процессы», мы получим список доступных процессов, которые мы можем запустить. Из этого списка мы выберем наш процесс и нажмем кнопку запуска:

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

«Если мы нажмем «Показать диаграмму», она не только покажет нам диаграмму процесса, но также выделит задачи, которые завершены, и ту, которая находится на рассмотрении. В нашем случае пользовательская задача все еще находится в ожидании, которая выделена:

Чтобы завершить эту задачу, мы можем нажать кнопку «Завершить». Как упоминалось ранее, нам нужно будет ввести сообщение, так как мы сохранили его обязательным. Следовательно, после ввода сообщения мы можем завершить задачу.

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

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

4. Activiti REST

Activiti предоставляет REST API для Activiti Engine, который можно установить, развернув файл activiti-rest.war в контейнере сервлетов, таком как Apache Tomcat.

По умолчанию Activiti Engine подключается к базе данных H2 в памяти. Так же, как мы видели в activiti-app, здесь мы можем изменить настройки базы данных в файле db.properties в папке WEB-INF/classes и воссоздать файл войны.

Когда приложение запущено и работает, мы можем использовать этот базовый URL-адрес для всех запросов:

По умолчанию все ресурсы REST требуют аутентификации действительного пользователя Activiti. Для каждого вызова REST следует использовать базовую аутентификацию доступа HTTP.

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

Чтобы создать процесс, во-первых, нам нужен файл BPMN для нашего процесса. Мы можем либо создать файл, как описано в наших предыдущих статьях, на основе Activiti с Java, либо его можно загрузить из раздела «Процесс» приложения Kickstart.

Нам нужно сделать запрос POST вместе с contentType: multipart/form-data, куда мы загрузим файл BPMN для нашего нового процесса:

http://localhost:8080/activiti-rest/service/

Когда мы делаем этот вызов, передавая BPMN файл для созданного нами процесса, он выдаст следующий вывод:

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

Далее мы можем запустить этот процесс использует processKey, который мы упомянули в файле BPMN:

С этим телом запроса:

POST repository/deployments

Ответ будет:

{    
    "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

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

POST /runtime/process-instances

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

{
    "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

Наконец, давайте выполним эту задачу, используя идентификатор задачи 49:

Это POST-запрос, и нам нужно отправить поле действия, указывающее, что мы хотим сделать с задачей. Мы можем «решить», «завершить» или «удалить» задачу. Также мы можем передать массив переменных, необходимых для выполнения задачи.

В нашем случае мы должны передать поле «message», которое является текстовым полем «Сообщение пользователя». Итак, тело нашего запроса:

GET runtime/tasks

5. Заключение

{
    "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...
        }
}

В этой статье мы обсудили, как можно использовать приложение Activiti Kickstart и предоставленный REST API.

POST runtime/tasks/49

Дополнительную информацию об activiti-rest можно найти в Руководстве пользователя, а сведения об activiti-app — в документации Alfresco.

«

{
    "action": "complete",
     "variables": [{
         "name": "message",
         "value": "This is a User Input Message"
     }]
}

5. Conclusion

In this article, we discussed how we could use the Activiti Kickstart App and the provided REST API.

More information about activiti-rest can be found in the User Guide, and activiti-app details can be found in the documentation by Alfresco.