Application Activiti Kickstart et application Web Activiti Rest

1. Vue d'ensemble

Dans nos articles précédents (basés sur l'API Activiti avec Java et Spring), nous avons vu comment gérer les processus par programmation. Si nous voulons mettre en place une démo, ainsi que l'interface utilisateur pour Activiti, nous avons deux webapps qui nous permettront de le faire en quelques minutes.

activiti-app offre une interface utilisateur à travers laquelle un utilisateur peut effectuer toutes les opérations liées à la gestion des identités et des tâches , créer des utilisateurs et des groupes.

De même, activiti-rest est une application Web qui fournit l'API REST pour effectuer toute opération sur un processus, une tâche, un processus , etc.

Dans cet article, nous verrons comment utiliser ces applications Web et quelles fonctionnalités elles fournissent.

2. Téléchargements

Nous pouvons télécharger les fichiers de guerre pour les deux applications Web à partir du site Web Activiti lui-même.

Pour la v6.0.0, nous pouvons simplement télécharger le activiti-6.0.0.zip , l'extraire, et les fichiers war se trouvent dans le répertoire activiti-6.0.0 / wars .

3. Application Activiti Kickstart

Nous aurons besoin d'un runtime Java fonctionnel et d'une installation Apache Tomcat pour déployer l'application. Tout conteneur Web fonctionnerait, mais Activiti est principalement testé sur Tomcat.

Maintenant, il nous suffit de déployer la guerre sur Tomcat et d'y accéder en utilisant // localhost: 8080 / activiti-app .

La page d'accueil devrait ressembler à ceci:

3.1. Base de données

Par défaut, il utilise la base de données en mémoire H2. Si nous voulons changer la configuration de la base de données, nous pouvons extraire le code et modifier le fichier activiti-app.properties.

Après cela, nous devons recréer le fichier war, ce qui peut être fait en exécutant le script start.sh. Cela créera l' appli activiti avec les dépendances requises.

3.2. Application Kickstart

Lorsque nous cliquons sur l'application Kickstart, nous obtenons les options pour travailler avec un processus. Nous pouvons créer / importer des processus et les exécuter à partir d'ici.

Créons un petit processus qui a une seule tâche utilisateur , qui reçoit un message d'un utilisateur. Une fois dans l'application Kickstart, pour créer un processus, sélectionnez l' onglet Processus , puis cliquez sur Créer un processus :

L'éditeur de processus s'ouvrira où nous pouvons faire glisser et déposer divers symboles pour les événements de début, divers types de tâches et les événements de fin pour définir un processus.

Lorsque nous ajoutons une tâche utilisateur à notre processus, nous devons l'attribuer à quelqu'un. Nous pouvons le faire en cliquant sur les affectations parmi les options de cette tâche et en sélectionnant un cessionnaire.

Pour plus de simplicité, affectons la tâche à l'initiateur du processus:

Nous voulons également que cette tâche utilisateur reçoive un message d'entrée de l'utilisateur. Pour ce faire, nous devons associer un formulaire, avec un seul champ de texte, à cette tâche.

Sélectionnez la tâche utilisateur et sélectionnez Formulaire référencé . Actuellement, aucun formulaire n'est associé à la tâche, cliquez donc sur Nouveau formulaire et ajoutez les détails requis:

Après cela, cela nous mènera à la section Formulaires où nous pouvons faire glisser et déposer divers champs que nous voulons dans notre formulaire et également définir des étiquettes pour eux:

Notez que nous avons coché la case Obligatoire, ce qui signifie que la tâche utilisateur ne peut pas se terminer sans entrer le message.

Une fois terminé, nous l'enregistrerons et accéderons à l' onglet Applications Pour pouvoir exécuter le processus que nous avons créé, nous devons créer une application de processus.

Dans l'application Process, nous pouvons ajouter une ou plusieurs définitions de processus . Après cela, nous devons publier cette application, afin que les processus soient mis à la disposition des autres utilisateurs:

3.3. Application de tâches

Dans l'application Tâche, il y a deux onglets: Tâches - pour les tâches en cours d'exécution et Processus - pour les processus en cours d'exécution .

Une fois que nous cliquons sur l' onglet Démarrer le processus dans les processus , nous obtenons la liste des processus disponibles que nous pouvons exécuter. Dans cette liste, nous sélectionnerons notre processus et cliquerons sur le bouton Démarrer :

Notre processus ne contient qu'une seule tâche et il s'agit d'une tâche utilisateur . Par conséquent, le processus attend qu'un utilisateur termine cette tâche. Lorsque nous cliquons sur la tâche que le processus attend, nous pouvons voir le formulaire que nous avons créé:

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.

Dans notre cas, nous devons passer un champ «message», qui est le champ de texte du message de l'utilisateur. Notre corps de demande est donc:

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

5. Conclusion

Dans cet article, nous avons expliqué comment utiliser l'application Activiti Kickstart et l'API REST fournie.

Vous trouverez plus d'informations sur activiti-rest dans le Guide de l'utilisateur et des détails sur activiti-app dans la documentation d'Alfresco.