Crea il tuo processo

I processi sono definiti usando il linguaggio JPDL, suggeriamo caldamente di leggere la documentazione JBPM per capire al meglio le potenzialità del modulo.

Twproject usa i processi in un modo partcolare che rende possibile la linearizzazione discussa nel capitolo “3.11 Business processes”. In particolare Twproject usa estensivamente “ActionHandlers” per sincronizzare flussi e alberi di task.

Esaminiamo “sampleSimpleProjectProcess.xml”.

screen1132

Prima il nome del processo. Deve essere univoco; due processi con lo stesso nome sono considerati versioni dello stesso processo.

screen1133

Poi la dichiarazione dello swimlane. Uno swimlane rappresenta il “ruolo” giocato da un “attore”. In termini di Twproject gli “attori” sono le “risorse” e quando istanziamo il processo una risorsa sarà assegnata come attore per ogni nodo. Lo swimlane è un “ruolo locale”, quindi un nome di swimlane deve corrispondere a un ruolo locale esistente. In questo esempio”Project manager”, “Customer”, “Worker” sono tutti ruoli esistenti.

screen1134

Poi chiamiamo TaskProcessFluxEndHandler quando il processo finisce. Quando un processo è istanziato, Twproject crea un task di root e un figlio per ogni passo del processo. Questo handler è responsabile della chiusura della root sul progetto associato al flusso.

screen1135

Questo è un vero passo del processo. Ogni “task-node” ha un nome che sarà usato come nome del task, saranno create assegnazioni per ogni swimlae coinvolte nel passo. Poi c’è la transizione e due handler obbligatori, TaskProcessTaskNodeEnterHandler e TaskProcessTaskNodeLeaveHandler associati rispettivamente agli eventi node-enter e node-leave.

Entrambi estendono TaskProcessTaskNodeEventHandler. Esamineremo questa classe in dettaglio
Poi il processo finisce.
screen1136

Per capire come Twproject e Flowork sono collegati diamo uno sguardo alla classe TaskProcessTaskNodeEventHandler:

screen1137
Questa è una classe astratta che recupera il collegamento tra “task” e “processo” che è modellato tramite l’oggetto “TaskProcess”, riempie gli attributi e chiama doTheRealAction che è implementato su TaskProcessTaskNodeEnterHandler e TaskProcessTaskNodeLeaveHandler.

screen1138

In questo caso quando si entra in un passo, lo stato del task corrispondente è impostato come “attivo”.

Questa è l’implementazione minima, ma se vuoi puoi estendere questa classeThis is the minimal implementation, but if you want you can extends this classes per eseguire azioni diverse. Puoi anche aggiungere più di un’azione per ogni evento.

E’ possibile definire anche la descrizione di un task e non solo il nome?

Certo. Ecco un esempio:

Il primo tag “descrizione” è usato per la descrizione del task; il secondo per la descrizione dell’assegnazione.

E’ possibile dare un nome di default per la risorsa, proposto da Twproject, quando un progetto guidato da processo sta per essere creato?

Si, ci sono alcune classi che implementano “ActorAssignmentHandler”.
In particolare:
DefaultAssignmentHandler:  che usa la swimlane standard
DeclaredAssignmentHandler: che usa un parametro “risorsa” specificato direttamente sul file di definizione del processo. Sono consentite risorse multiple delimitate da virgola
InstantiatorSwimlaneAssignmentHandler: usa la risorsa che istanzia il processo
ScaleToBossAssignmentHandler: usa il manager di quello che esegue il passo

Twproject ha aggiunto attributi alle descrizioni del workflow che consentono di impostare la durata dei task e la stima delle assegnazioni: