Activiti Kickstart App e Activiti Rest Webapp

1. Panoramica

Nei nostri articoli precedenti (basati sull'API Activiti con Java e Spring), abbiamo visto come gestire i processi in modo programmatico. Se vogliamo impostare una demo, insieme alla UI per Activiti, abbiamo due webapp che ci permetteranno di farlo in pochi minuti.

activiti-app offre un'interfaccia utente attraverso la quale un utente può eseguire qualsiasi operazione relativa alla gestione delle identità e alla gestione delle attività , creare utenti e gruppi.

Allo stesso modo, activiti-rest è un'app web che fornisce l'API REST per eseguire qualsiasi operazione su un processo, un'attività, un processo , ecc.

In questo articolo, esamineremo come utilizzare queste webapp e quali funzionalità forniscono.

2. Download

Possiamo scaricare i file war per entrambe le webapp dal sito stesso di Activiti.

Per la v6.0.0, possiamo semplicemente scaricare activiti-6.0.0.zip , estrarlo e i file war possono essere trovati nella directory activiti-6.0.0 / wars .

3. Activiti Kickstart App

Avremo bisogno di un runtime Java funzionante e di un'installazione di Apache Tomcat per distribuire l'app. Qualsiasi contenitore web funzionerebbe, ma Activiti è testato principalmente su Tomcat.

Ora, dobbiamo solo implementare la guerra su Tomcat e accedervi utilizzando // localhost: 8080 / activiti-app .

La home page dovrebbe apparire così:

3.1. Banca dati

Per impostazione predefinita, utilizza il database in memoria H2. Se vogliamo cambiare la configurazione del DB, possiamo controllare il codice e modificare il file activiti-app.properties.

Dopo aver fatto ciò, dobbiamo rigenerare il file war, cosa che può essere eseguita eseguendo lo script start.sh. Questo creerà l' app activiti insieme alle dipendenze richieste.

3.2. App Kickstart

Quando facciamo clic sull'app Kickstart, otteniamo le opzioni per lavorare con un processo. Possiamo creare / importare processi ed eseguirli da qui.

Creiamo un piccolo processo che abbia un'unica attività utente , che riceve un messaggio da un utente. Una volta nell'app Kickstart, per creare un processo selezionare la scheda Processi e fare clic su Crea processo :

Si aprirà l'editor dei processi in cui è possibile trascinare e rilasciare vari simboli per eventi di inizio, vari tipi di attività ed eventi di fine per definire un processo.

Poiché stiamo aggiungendo un'attività utente al nostro processo, dobbiamo assegnarla a qualcuno. Possiamo farlo facendo clic sui compiti dalle opzioni per questa attività e selezionando un assegnatario.

Per semplicità, assegniamo l'attività all'iniziatore del processo:

Vogliamo anche che questa attività utente riceva un messaggio di input dall'utente. Per ottenere ciò, dobbiamo associare un Form, con un unico campo di testo, a questa attività.

Seleziona l' attività utente e seleziona Modulo referenziato . Al momento, non esiste alcun modulo associato all'attività, quindi fai clic su Nuovo modulo e aggiungi i dettagli richiesti:

Dopodiché, ci porterà alla sezione Moduli dove possiamo trascinare e rilasciare vari campi che vogliamo nel nostro modulo e anche impostare le etichette per loro:

Si noti che abbiamo selezionato Richiesto, il che significa che l' attività utente non può essere completata senza inserire il messaggio.

Una volta terminato, lo salveremo e andremo alla scheda App . Per poter eseguire il processo che abbiamo creato, dobbiamo creare un'app di processo.

Nell'app di processo, possiamo aggiungere una o più definizioni di processo . Dopo aver fatto ciò, dobbiamo pubblicare questa App, in modo che i Processi siano resi disponibili ad altri utenti:

3.3. App attività

Nell'app Attività, ci sono due schede: Attività - per le attività attualmente in esecuzione e Processi - per i Processi attualmente in esecuzione .

Dopo aver fatto clic sulla scheda Avvia processo in processi , viene visualizzato l'elenco dei processi disponibili che è possibile eseguire. Da questo elenco, selezioneremo il nostro processo e faremo clic sul pulsante di avvio :

Il nostro processo contiene solo una singola attività ed è un'attività utente . Pertanto, il processo attende che un utente completi questa attività. Quando facciamo clic sull'attività in attesa del processo, possiamo vedere il modulo che abbiamo creato:

Se facciamo clic su Mostra diagramma , non solo ci mostrerà il diagramma di processo, ma evidenzierà anche le attività completate e quella in sospeso. Nel nostro caso, l' attività utente è ancora in sospeso, che viene evidenziata:

Per completare questa attività, siamo in grado di fare clic sul Complete butto n. Come accennato in precedenza, dovremo inserire il messaggio, poiché lo abbiamo mantenuto obbligatorio. Quindi, dopo aver inserito il messaggio, possiamo completare l'attività.

3.4. App per la gestione delle identità

Oltre a gestire un processo, abbiamo un'app per la gestione delle identità, che ci consente di aggiungere utenti e gruppi. Possiamo anche definire ruoli per gli utenti.

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.

Nel nostro caso, dobbiamo passare un campo "messaggio", che è il campo di testo del messaggio utente. Quindi il nostro corpo della richiesta è:

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

5. conclusione

In questo articolo, abbiamo discusso di come utilizzare l'app Activiti Kickstart e l'API REST fornita.

Ulteriori informazioni su activiti-rest sono disponibili nella Guida per l'utente, mentre i dettagli sull'attiviti -app sono disponibili nella documentazione di Alfresco.