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

1. Общ преглед

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

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

По същия начин activiti-rest е уебсайт, който предоставя REST API за извършване на всяка операция върху процес, задача, процес и т.н.

В тази статия ще разгледаме как да използваме тези уеб приложения и какви функционалности те предоставят.

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 в паметта. Ако искаме да променим конфигурацията на DB, можем да проверим кода и да модифицираме файла activiti-app.properties.

След като направим това, трябва да генерираме отново военния файл, което може да стане чрез стартиране на скрипта start.sh. Това ще изгради приложението activiti заедно с необходимите зависимости.

3.2. Kickstart App

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

Нека създадем малък процес, който има една потребителска задача , която получава съобщение от потребител. Веднъж в приложението Kickstart, за да създадете процес, изберете раздела Процеси и кликнете върху Създаване на процес :

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

Тъй като добавяме потребителска задача към нашия процес, трябва да я възложим на някого. Можем да го направим, като щракнем върху задания от опциите за тази задача и изберете Изпълнител.

За простота, нека възложим задачата на инициатора на процеса:

Също така искаме тази потребителска задача да получи входно съобщение от потребителя. За да постигнем това, трябва да свържем формуляр с едно текстово поле с тази задача.

Изберете Потребителска задача и изберете Референтен формуляр . Понастоящем няма формуляр, свързан със задачата, така че кликнете върху Нов формуляр и добавете необходимите подробности:

След това ще ни отведе до раздела Форми, където можем да плъзгаме и пускаме различни полета, които искаме във формата си, и също така да задаваме етикети за тях:

Забележете, че сме отбелязали задължително, което означава, че задачата на потребителя не може да изпълни без въвеждане на съобщението.

След като приключим, ще го запазим и ще отидем в раздела Приложения . За да можем да стартираме процеса, който създадохме, трябва да създадем Process App.

В приложението 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.

В нашия случай трябва да предадем поле „message“, което е текстовото поле на out of User Message. Така че нашето тяло за заявка е:

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

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

В тази статия обсъдихме как бихме могли да използваме приложението Activiti Kickstart и предоставения REST API.

Повече информация за activiti-rest може да бъде намерена в Ръководството за потребителя, а подробности за activiti-app могат да бъдат намерени в документацията на Alfresco.