Flows for APEX è una soluzione open source, messa a disposizione gratuitamente sotto licenza MIT, che consente di progettare ed eseguire dei workflow all’interno di una applicazione APEX. È stato sviluppata da un gruppo di appassionati esperti di Apex e nel tempo si è rapidamente evoluta in una soluzione di modellazione dei processi ricca di funzionalità.
Cliccando a questo link puoi accedere alla pagina GitHub del progetto Flows for APEX dove puoi trovare, tra le altre cose, diverse risorse molto utili come tutorial e alcune demo.
In questo articolo ti voglio mostrare come funziona.
IN QUESTO ARTICOLO
Flows for APEX: come si installa
Per usare Flows for APEX devi prima di tutto scaricare l’installer dal sito dello sviluppatore.

Nel momento in cui sto scrivendo questo articolo, la versione scaricabile di Flows for APEX è la 5.1.1. utilizzabile dalla release Oracle APEX 20.1 e superiori.
Nella cartella compressa troverai due installer SQL, il primo è il motore di Flow, il secondo è una applicazione DEMO che puoi usare per fare dei test.

Collegati al tuo Workspace APEX, entra nell’APP Builder e clicca Import.

Seleziona l’installer dell’applicazione Flows for APEX e imposta le varie opzioni per l’import del file:
- File Type: Database Application
- File Character Set: Unicode UTF-8
Clicca Next

Clicca su Next

Clicca Install Application.

Attiva l’opzione Install Supporting Objects e clicca Next.

Clicca Install.

Alla fine della procedura dovresti vedere l’applicazione disponibile nel workspace.

Opzionalmente puoi installare anche una applicazione di DEMO seguendo la stessa procedura che ho appena spiegato.

Flows for APEX: panoramica sull’applicazione
Se hai installato Flows for APEX puoi eseguire l’applicazione.
La sezione Getting Started mette a tua disposizione una serie di informazioni generali, i riferimenti alla documentazione on-line e alla pagina di download.

Flow Management
Nela sezione Flow Management puoi creare i tuoi workflow.

Per vedere la definizione di un Flow, clicca sul bottone Edit.
Nella parte alta della pagina puoi vedere alcune informazioni generali come il nome, la versione e lo stato.
A destra ci sono dei contatori che mostrano quanti processi sono stati attivati per questo flow (istanze) con indicazioni di quali sono in corso (running instances) e quali sono completate (completed instances).

Nella sezione finale della pagina puoi vedere il flusso grazie a BPMN.i0, un viewer Third-Party integrato.

Cliccando su Edit Flow puoi modificare il Flow direttamente nell’editor grafico. Quando hai completato le modifiche clicca su Save Flow per salvare la definizione del flow.

Il formato con cui viene salvato il flow è definito dallo standard BPMN 2.0. Quindi oltre ad essere utilizzato da una applicazione APEX può essere esportato per essere integrato in altre applicazioni. Clicca su View Source per vedere la definizione del flusso.

Per esportare il file bpmn clicca su Export, specifica le opzioni e clicca nuovamente Export per salvare localmente la definizione del flusso.

Flow Monitor
Nella sezione Flow Monitor puoi monitorare e gestire i processi di workflow che sono stati attivati.

Un processo Flow può essere avviato da una qualsiasi applicazione APEX usando delle API che Flows for APEX mette a disposizione (nei paragrafi successivi vedremo come fare).
Per avviare manualmente un processo dal Flow Monitor, clicca Create New Instance.

Specifica quale flow avviare e clicca Create per mettere in coda il processo

La nuova istanza del processo è stata creata ma non è ancora avviata: clicca sul bottone Start Process per avviare il flow.

Una volta avviato il flow, puoi vedere il suo avanzamento direttamente nel viewer dove il task correntemente attivo viene evidenziato.

Per far avanzare il flow, clicca sul tab Subflows.
In questa sezione puoi vedere i task che sono stati attivati; per far avanzare il flow clicca sul bottone Go To Next Step.

Viene attivato il secondo task (Task B)

Anche nel viewer la situazione è cambiata, infatti è cambiato il task correntemente attivo.

Flows for APEX: un esempio pratico
Gli sviluppatori di Flows for APEX hanno pensato bene di rendere disponibili all’interno del pacchetto di rilascio una loro una applicazione di demo e diversi template di flussi che puoi utilizzare per fare esercizio.
Questi template sono disponibili nella sezione Flow Management.

Il mio consiglio è di non modificare questi flow ed eventualmente di crearne di nuovi come copia usando le funzionalità di export/import.
In questo tutorial mi limiterò a spiegarti come creare un semplice flow che aggiorna lo stato di un record e di come integrarlo all’interno della tua applicazione.
Nei prossimi articoli andremo ad esplorare nel dettaglio, usando anche degli esempi pratici, tutte le funzionalità che vengono messe a disposizione da questa applicazione.
Applicazione Prenotazione Sale
Per testare le funzionalità di Flows for APEX ho creato una semplicissima applicazione per gestire le richieste di prenotazione delle sale riunioni che puoi vedere cliccando a questo link.

Il richiedente deve inserire una richiesta specificando la sala da riservare, la data e ora per la quale deve essere impegnata, il numero di persone e se sono richiesti dei servizi aggiuntivi come il proiettore o il servizio di catering.

Dopo aver sottomesso la richiesta, viene attivato un task in carico alla segreteria che deve leggere i dati inseriti nella form di prenotazione e procedere alla approvazione o rifiuto della richiesta.

Quando una richiesta di prenotazione viene approvata, il sistema riserva la sala riunione prenotata ed invia una mail al richiedente.

Nella parte inferiore dell’applicazione ho creato un monitor che mostra in tempo reale lo stato di avanzamento del workflow di approvazione gestito da Flow for APEX.

Workflow di Prenotazione Sale
Per gestire la prenotazione delle sale riunione ho creato il seguente workflow.

- Il processo parte con il richiedente che deve inserire una nuova richiesta di prenotazione per una sala riunioni.
- La richiesta viene presa in carico dalla segreteria che provvederà ad approvare o rifiutare la richiesta
- Se la richiesta viene accetta, la sala riunioni viene riservata e viene inviata una mail di conferma al richiedente. Questo processo avviene automaticamente, sulla base dei dati inseriti nella richiesta.
- Se la richiesta viene rifiutata viene inviata automaticamente una mail anche in questo caso.
Inserimento Prenotazione

Task di tipo User Task che viene attivato dopo che l’utente ha creato la richiesta nell’applicazione, ovvero dopo che ha premuto il bottone CREA RICHIESTA.

Lavorazione Richiesta

Task di tipo User Task che viene attivato dopo che l’utente ha sottomesso la richiesta di prenotazione, ovvero dopo che ha premuto il bottone INVIA RICHIESTA.

Approvazione della Richiesta

Per gestire correttamente il comportamento dell’applicazione in funzione dell’approvazione o rifiuto della richiesta ho creato un Gateway di tipo esclusivo.
Il nome del Gateway è la variabile che dovremo valorizzare per far capire a Flows for APEX quale ramo deve navigare

I valori ammessi sono definiti nei rami di uscita dal Gateway

Task automatici
I task per inviare la mail sono di tipo Service Task e richiedono di specificare quale script PL/SQL deve essere eseguito.
Questo tipo ti task si completano automaticamente una volta eseguito lo script PL/SQL.

Come integrare Flows for APEX nella applicazione
Come abbiamo visto nel paragrafo precedente, quando crei un flusso puoi utilizzare diversi tipi di task.
Ad esempio, ci sono task che devono essere fatti avanzare a seguito di una azione dell’utente (ad esempio premere un bottone) oppure task che vengono eseguiti automaticamente dal Flow fo APEX non appena vengono attivati (Service Task)
Per integrare la tua applicazione con Flows for APEX devi utilizzare le api PL/SQL che vengono messe a disposizione.
Come avviare un workflow
Nell’applicazione che ho creato, ogni volta che viene creata una richiesta di prenotazione viene generata una nuova istanza di workflow.
Per fare questo ho richiamato l’API di creazione del worflow usando questo script
declare
p_spcs_prcs_id number;
p_spcs_name varchar2;
begin
p_spcs_prcs_id := flow_api_pkg.flow_create(pi_dgrm_name => 'Prenotazione_Sala_Riunione', pi_prcs_name => p_spcs_name);
flow_api_pkg.flow_start(p_process_id => p_spcs_prcs_id);
end;
La funzione flow_api_pkg.flow_create ha come parametri:
- pi_dgrm_name: il nome del workflow da istanziare
- pi_prcs_name: il nome dell’istanza. Io ho utilizzato il numero della richiesta generata dal sistema
In output restituisce l’ID del workflow che è stato istanziato.
Come far avanzare un workflow
Anche per far avanzare un workflow è necessario richiamare una API PL/SQL.
Ad esempio, per muovere il flusso dal task Lavorazione Richiesta a Richiesta Approvata ho utilizzato le seguenti istruzioni:
- flow_process_vars.set_var per impostare la variabile che serve per navigare il Gateway decisionale
- flow_api_pkg.flow_complete_step per far avanzare il flusso
declare
p_process_id number;
p_subflow_id number;
p_action varchar2;
begin
flow_process_vars.set_var(pi_prcs_id => p_process_id, pi_var_name => 'Gateway_Approvazione_Richiesta:route', pi_vc2_value => p_action);
flow_api_pkg.flow_complete_step(p_process_id => p_process_id, p_subflow_id => p_subflow_id);
end;
In Conclusione
Abbiamo visto come possiamo utilizzare Flows for APEX progettare e gestire un flusso di lavoro tramite una applicazione APEX.
Benché sia un prodotto che necessita di una certa capacità di programmazione per essere sfruttato al meglio, è probabilmente una delle migliori soluzioni disponibili per gestire in workflow in Oracle APEX.
L’aspetto sicuramente più interessante sta nel motore di progettazione che si basa su un editor BPMN grafico, molto intuitivo e facile da utilizzare.
Mentre un po’ più dura è l’integrazione con le applicazioni, basate su chiamate ad api PL/SQL.
Se vuoi approfondire l’argomento, ti invito a guardare questa sessione dimostrativa di Flows for APEX.
Ciao, innanzitutto grazie per questo articolo davvero utilissimo.
Avrei la necessità di chiederti un aiuto. Stiamo utilizzando questo strumento per orchestrare dei lanci di prcedure plsql. Per caso è possibile collegare la documentazione al singolo task?
Per esempio, è possibile collegare una action al singolo task in modo che con un click si possa aprire una pagina in cui posso inserire un pò di cocumentazione? In rete purtroppo non ho trovato nulla in tal senso.
Grazie mille in anticipo se riuscirai ad aiutarci.
Yes! Finally sоmething about tasks.