Додаток Activiti Kickstart та Activiti Rest Webapp

1. Огляд

У наших попередніх статтях (на основі Activiti API з Java та Spring) ми бачили, як програмно керувати процесами. Якщо ми хочемо створити демонстраційну версію разом із інтерфейсом користувача для Activiti, у нас є два веб-додатки, які дозволять нам це зробити всього за кілька хвилин.

activiti-app пропонує користувальницький інтерфейс, за допомогою якого користувач може виконувати будь-які операції з управління ідентифікацією та управління завданнями , створювати користувачів та групи.

Подібним чином activiti-rest - це веб-програма, яка надає API REST для виконання будь-якої операції над процесом, завданням, процесом тощо.

У цій статті ми розглянемо, як використовувати ці веб-додатки та які функціональні можливості вони надають.

2. Завантаження

Ми можемо завантажити військові файли для обох веб-додатків із самого веб-сайту Activiti.

Для v6.0.0 ми можемо просто завантажити activiti-6.0.0.zip , витягти його, і файли війни можна знайти в каталозі activiti-6.0.0 / wars .

3. Додаток Activiti Kickstart

Для розгортання програми нам знадобиться робоча програма Java та установка Apache Tomcat. Будь-який веб-контейнер буде працювати, але Activiti тестується в основному на Tomcat.

Тепер нам потрібно просто розгорнути війну на Tomcat і отримати до неї доступ за допомогою // localhost: 8080 / activiti-app .

Домашня сторінка повинна виглядати так:

3.1. База даних

За замовчуванням він використовує базу даних H2 в пам'яті. Якщо ми хочемо змінити конфігурацію БД, ми можемо перевірити код і змінити файл activiti-app.properties.

Після цього нам потрібно повторно створити файл війни, що можна зробити, запустивши скрипт start.sh. Це створить додаток activiti разом із необхідними залежностями.

3.2. Kickstart App

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

Давайте створимо невеликий процес, який має єдине завдання користувача , яке отримує повідомлення від користувача. Опинившись у програмі Kickstart, щоб створити процес, виберіть вкладку Процеси та натисніть Створити процес :

Відкриється редактор процесів, де ми можемо перетягувати різні символи для початкових подій, різних типів завдань та кінцевих подій, щоб визначити процес.

Оскільки ми додаємо завдання користувача до нашого процесу, нам потрібно призначити його комусь. Ми можемо зробити це, натиснувши на завдання серед опцій цього завдання та вибравши Цільонера.

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

Ми також хочемо, щоб це завдання користувача отримало вхідне повідомлення від користувача. Щоб досягти цього, нам потрібно зв’язати форму із одним текстовим полем із цим завданням.

Виберіть Завдання користувача та виберіть Форму, на яку посилаються . На даний момент із завданням не пов’язано жодної форми , тож натисніть Нову форму та додайте необхідні дані:

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

Зверніть увагу, що ми поставили галочку в обов’язковому, що означає, що завдання користувача не може виконати без введення повідомлення.

Після закінчення ми збережемо його та перейдемо на вкладку Програми . Щоб мати змогу запустити процес, який ми створили, нам потрібно створити додаток Process.

У програмі Process ми можемо додати одне або кілька визначень процесів . Після цього нам потрібно опублікувати цю програму, щоб процеси були доступні для інших користувачів:

3.3. Завдання App

У додатку Завдання є дві вкладки: Завдання - для поточно виконуваних завдань та Процеси - для запущених в даний час процесів.

Після того, як ми клацнемо на вкладці « Почати процес» на вкладці « Процеси », ми отримаємо список доступних процесів, які ми можемо запустити. Із цього списку ми оберемо наш процес і натисніть кнопку « Пуск »:

Наш процес містить лише одне завдання, і це завдання користувача . Отже, процес чекає, поки користувач виконає це завдання. Коли ми натискаємо на завдання, на яке очікує процес, ми можемо побачити створену нами форму:

If we click on Show Diagram, it’ll not only show us the Process diagram but also highlight the tasks that are completed and the one which is pending. In our case, the User Task is still pending, which is highlighted:

To complete this task, we can click on the Complete button. As mentioned earlier we'll need to enter the Message, as we have kept it mandatory. Hence, after entering the Message, we can Complete the task.

3.4. Identity Management App

Apart from managing a process, we've got an Identity Management App, that allows us to add users and groups. We can also define roles for the users.

4. Activiti REST

Activiti provides a REST API for the Activiti Engine that can be installed by deploying the activiti-rest.war file to a servlet container like Apache Tomcat.

By default, the Activiti Engine will connect to an in-memory H2 database. Just like we saw in activiti-app, here we can change the database settings in the db.properties file in the WEB-INF/classes folder and recreate the war file.

With the app up and running, we can use this base URL for all the requests:

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

By default, all REST resources require a valid Activiti user to be authenticated. Basic HTTP access authentication should be used for every REST call.

4.1. Creating and Running a Process

To create a process, first, we need the BPMN file for our process. We can either create the file as described in our previous articles based on Activiti with Java, or it can be downloaded from the Kickstart App's Process section.

We need to make a POST request, along with the contentType: multipart/form-data, where we'll upload the BPMN file for our new process:

POST repository/deployments

When we make this call by passing the BPMN file for the process we created, it'll give the following output:

{ "id": "40", "name": "user_msg.bpmn20.xml", "deploymentTime": "2017-10-04T17:28:07.963+05:30", "category": null, "url": "//localhost:8080/activiti-rest/service/repository/deployments/40", "tenantId": "" }

Now, we can see our process definition listed, if we get all the process definitions:

GET repository/process-definitions

Next, we can run this process using the processKey that we have mentioned in the BPMN file:

POST /runtime/process-instances 

With this request body:

{ "processDefinitionKey":"user_msg" } 

The response will be:

{ "id": "44", "url": "//localhost:8080/activiti-rest/service/runtime/process-instances/44", "businessKey": null, "suspended": false, "ended": false, "processDefinitionId": "user_msg:1:43", "processDefinitionUrl": "//localhost:8080/activiti-rest/service/repository/process-definitions/user_msg:1:43", "processDefinitionKey": "user_msg", //other details... } 

We can see the diagram of our running process using the id of the process instance returned with the previous response:

GET runtime/process-instances/44/diagram 

As mentioned earlier, the process is waiting for the User Task to finish, and hence it is highlighted in the diagram:

4.2. Completing a Task

Let's now take a look at our pending task using:

GET runtime/tasks 

The response will have a list of pending tasks. Currently, there's only one task – our User Task:

{ "data": [ { "id": "49", "url": "//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... } } 

At last, let's complete this task using the task id 49:

POST runtime/tasks/49 

This is a POST request, and we need to send the action field indicating what we want to do with the task. We can “resolve”, “complete” or “delete” a task. Also, we can pass an array of variables, required by the task to complete.

У нашому випадку ми повинні передати поле "повідомлення", яке є текстовим полем "Повідомлення користувача". Отже, наш орган запиту:

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

5. Висновок

У цій статті ми обговорили, як можна використовувати програму Activiti Kickstart та наданий REST API.

Більше інформації про activiti-rest можна знайти в Посібнику користувача, а подробиці програми activiti - у документації Alfresco.