Contenitore di un processo. Un partecipante di un’interazione. I pool si scambiano dati solo tramite flussi di messaggi. Può essere compresso per nascondere i dettagli.
Una banda all’interno di un pool che indica chi esegue i task (una posizione, un ruolo, un reparto o un sistema IT).
Il tipo non è specificato. Si usa nelle prime fasi di modellazione, quando il metodo di esecuzione non è ancora deciso o quando è irrilevante per l’obiettivo del diagramma. In sostanza un segnaposto che in seguito viene raffinato in un tipo concreto.
Eseguito da una persona tramite un’interfaccia software: un modulo nel CRM, una schermata in un’app web, un elemento in un task manager. La differenza fondamentale rispetto a un task manuale è che la persona lavora dentro il sistema che tiene traccia dello stato del task.
Eseguito da una persona senza il coinvolgimento del motore BPM. Il sistema non è in grado di rilevare automaticamente quando questo lavoro inizia o finisce.
Eseguito automaticamente da un programma o un servizio. Nessuna persona è coinvolta. È il tipo di task più comune nei processi eseguibili.
Invia un messaggio a uno specifico partecipante esterno (un altro processo o sistema) e termina immediatamente, senza attendere una risposta. Un pattern «fire-and-forget».
Attende un messaggio in arrivo da un partecipante esterno. Il processo si mette in pausa su questo task fino all’arrivo del messaggio.
Una variante speciale è il Receive istanziante: se un task di questo tipo è il primo passo di un processo, la ricezione stessa del messaggio genera una nuova istanza di processo (un’alternativa all’evento di inizio messaggio).
Esegue uno script incorporato (codice) definito direttamente nel modello di processo. A differenza di un task di servizio, il codice non richiama alcun sistema esterno: viene eseguito dentro il motore BPM.
Richiama un motore decisionale (ad esempio una tabella DMN). Gli input vengono passati a un insieme di regole e viene restituita una decisione.
Piccole icone al centro della parte inferiore del rettangolo del task. Indicano il comportamento del task, non il suo tipo.
| Marcatore | Significato | Esempio |
|---|---|---|
| ↻ Loop | Il task si ripete finché una condizione è verificata (una sola istanza, più iterazioni) | Revisionare un documento → inviare → se respinto, ripetere |
| ∥ Multi-istanza parallela | N istanze partono contemporaneamente — una per ogni elemento della collezione | Inviare la notifica a tutti gli approvatori contemporaneamente |
| ≡ Multi-istanza sequenziale | Le stesse N istanze, ma una dopo l’altra | Intervistare ogni candidato a turno |
| ⏪ Compensazione | Un task di rollback: viene eseguito solo quando la compensazione viene attivata, per annullare un’azione già completata | «Annulla prenotazione» dopo che «Prenota hotel» è già stato completato |
| ~ Ad-hoc | I task all’interno del sottoprocesso vengono eseguiti in qualsiasi ordine, possono essere ripetuti o saltati; al loro interno non sono ammessi eventi di inizio e fine | Libera scelta dei passi durante una consulenza con il cliente |
| + Sottoprocesso | Un’attività composita con una sequenza interna nascosta; i flussi non possono attraversarne il confine | «Elaborazione dell’ordine» nasconde 10 passi interni |
Un’attività composita contrassegnata con «+». Contiene una propria sequenza di passi. I flussi non possono attraversarne il confine. Gli eventi intermedi si agganciano al confine.
Bordo spesso. Fa riferimento a un sottoprocesso globale (ad esempio «Approvvigionamento») riutilizzato in processi diversi.
Marcatore «~». Le attività al suo interno possono essere eseguite in qualsiasi ordine, ripetute o saltate. Al suo interno non sono ammessi eventi di inizio/fine.
Bordo tratteggiato all’interno di un processo. Attivato da un evento di inizio mentre il processo padre è attivo. Interrompente — annulla il padre. Non interrompente — viene eseguito in parallelo.
Controllano la diramazione e la convergenza. Un gateway non è un task! La decisione viene presa prima del gateway.
Il gateway più comune. In fase di divisione attiva esattamente un percorso uscente — quello la cui condizione risulta vera per prima. Se nessuna condizione è soddisfatta, il processo termina con un errore (per questo è buona pratica definire sempre un ramo «default»). In fase di convergenza lascia passare subito ogni token in arrivo, senza attendere gli altri.
Analogia: un bivio in cui si prosegue in una sola direzione.
In fase di divisione attiva tutti i percorsi uscenti in una volta, senza condizioni — nessun controllo. In fase di convergenza attende i token su tutti i percorsi entranti e solo quando sono arrivati tutti fa passare un unico token.
Analogia: un responsabile assegna dei compiti a cinque collaboratori e aspetta che tutti e cinque abbiano finito.
Un ibrido tra XOR e AND. In fase di divisione attiva uno o più percorsi a seconda delle condizioni — ogni condizione viene valutata in modo indipendente. In fase di convergenza attende i token solo sui percorsi effettivamente attivati (non su tutti, come fa l’AND).
Analogia: un buffet — prendi un piatto, due o tutti, ma mai zero.
Fondamentalmente diverso dagli altri: instrada non in base ai dati, ma in base all’evento che arriva per primo. Dopo il gateway si collocano eventi intermedi di attesa (timer, messaggio, condizionale, segnale). Non appena uno si attiva, gli altri vengono annullati.
Analogia: hai ordinato una pizza — se non arriva entro 60 minuti, chiami la pizzeria; se arriva prima, mangi.
Si usa quando la logica di diramazione non può essere espressa dai gateway standard. La condizione di convergenza è definita da un’espressione (ad esempio, «continua quando 3 rami su 5 sono terminati» oppure «quando è arrivata la prima risposta e sono passati 10 minuti»).
Un rombo senza marcatore. Semanticamente equivalente a un gateway esclusivo (XOR) — lo standard BPMN consente di omettere la croce. Alcuni metodologi lo considerano una cattiva pratica perché riduce la leggibilità: non è chiaro se l’autore abbia dimenticato il marcatore o abbia scelto XOR di proposito.
Un evento è qualcosa che accade (un fatto), a differenza di un task (un’azione attiva). Sono disegnati come cerchi.
Catching (marcatore non riempito) — attesa. Throwing (riempito) — lancio. Eventi di confine: interrompenti (continuo) e non interrompenti (tratteggiato).
Icone di bpmn-font (Camunda). «—» = non definito dallo standard.
| Tipo | Inizio | Intermedio | Fine | |||||
|---|---|---|---|---|---|---|---|---|
| Normale | Sottopr. ev. | Non int. | Cattura | Di confine | Confine non int. | Lancio | ||
| Nessuno | — | — | — | — | — | |||
| ✉ Messaggio | ||||||||
| ⏱ Timer | — | — | ||||||
| ⚡ Errore | — | — | — | — | — | |||
| ▲ Segnale | ||||||||
| 📋 Condizionale | — | — | ||||||
| ↗ Escalation | — | — | ||||||
| ⬤ Terminazione | — | — | — | — | — | — | — | |
| ⏪ Compensazione | — | — | — | — | ||||
| ✖ Annullamento | — | — | — | — | — | — | ||
| ➡ Collegamento | — | — | — | — | — | — | ||
| ⬠ Multiplo | ||||||||
| ➕ Multiplo parallelo | — | — | ||||||
Scambio con un destinatario specifico: e-mail, chiamata, HTTP, push. Disponibile in ogni posizione.
Data/ora, intervallo, conto alla rovescia (scadenza). Solo catching.
Un guasto grave. Catching — solo su un confine. Throwing — solo alla fine.
Attesa di una condizione esterna («il forno è caldo»). Solo catching.
Trasmissione broadcast (a differenza di un messaggio indirizzato). Reagisce qualsiasi sottoscrittore.
Arresta immediatamente l’intera istanza del processo. Solo di fine.
E se, dopo la fine del task 3, non ha più senso continuare il task 2? Allora si usa il pattern seguente:
Un «teletrasporto» del flusso. Una coppia throw + catch sostituisce una freccia lunga. Solo intermedio.
Annulla un’azione precedentemente completata. Il task di compensazione è collegato tramite un’associazione.
Inviata da un sottoprocesso al processo padre — non è un errore. Può essere non interrompente.
Solo nel contesto delle transazioni. Di fine — rollback. Di confine — catch.
Un «foglio di carta» con l’angolo piegato. Rappresenta informazioni che vengono create, consumate o trasferite tra i task all’interno di un’istanza di processo. Esiste solo finché l’istanza è attiva.
Un cilindro. Un’archiviazione persistente che sopravvive all’istanza del processo: un database, un registro, un archivio di file. I task lo leggono e ci scrivono.
Parametri di un processo o sottoprocesso sul suo confine. Input — ciò che viene fornito dall’esterno; output — ciò che viene restituito. Freccia con un triangolo vuoto/pieno.
Un commento collegato a qualsiasi elemento tramite una linea tratteggiata. Non incide sull’esecuzione — serve solo a chiarire le cose al lettore del diagramma.
Un rettangolo tratteggiato con angoli arrotondati. Un raggruppamento visivo di elementi (ad esempio «tutti i task di logistica»). Non ha semantica di esecuzione; i flussi possono attraversarne liberamente il confine.
Una freccia continua con la punta piena. Definisce l’ordine di esecuzione all’interno di un unico pool. Non può attraversare i confini del pool.
Un flusso condizionale (con un piccolo rombo all’origine) — si attiva solo se la sua condizione è vera. Si usa sulle frecce uscenti da un task senza gateway.
Un flusso predefinito (con un trattino all’origine) — il percorso di riserva di un gateway XOR/OR o di una divisione condizionale, percorso se nessun’altra condizione è soddisfatta.
Una freccia tratteggiata con la punta vuota. Collega pool diversi — un messaggio scambiato tra partecipanti indipendenti. Non si usa all’interno di un unico pool.
Un sottoprocesso con un doppio bordo. Semantica ACID: o tutte le azioni interne vengono confermate con successo, oppure l’intera transazione viene annullata tramite un evento Cancel (con compensazioni). Si usa per garantire la coerenza nelle operazioni distribuite.
Crea gratis il tuo primo diagramma BPMN — senza registrazione né carta di credito.
Inizia a generare diagrammi BPMN con l’IA