Video tutorial: bottoni di workflow con annotazioni Java
Pubblicato il 14 Giugno 2013 da Paolo Predonzani
Qual è il modo più semplice per implementare un workflow? Sicuramente sono richieste un'interfaccia utente (uno o più bottoni) e della logica applicativa (uno o più metodi che rispondono ai bottoni). La corrispondenza fra bottone e metodo è intuitiva. In Portofino 4 è anche esplicita a livello di codice tramite opportune annotazioni.
Il seguente frammento di codice
@Button(list="crud-read", key="my.label", order=10.0d) public Resolution myWorkflowAction() { /* button logic here*/ }
è responsabile sia per la generazione del bottone, sia per la logica eseguita alla sua pressione. Il segreto è nell'annotazione @Button che permette di specificare posizione, etichetta e ordine del bottone, oltre a identificare il metodo a cui sarà collegato.
La corrispondenza fra interfaccia utente e metodo della action è ancora più evidente in caso di bottoni condizionati. Se una certa condizione è verificata, allora è necessario mostrare il bottone e abilitare la chiamata del metodo. Altrimenti è necessario nascondere il bottone e inibire la chiamata del metodo. In Portofino 4 questo è gestito tramite l'annotazione @Guard:
@Guard(test="myWorkflowCondition()") @Button(list="crud-read", key="my.label", order=10.0d) public Resolution myWorkflowAction() { /* button logic here */ } boolean myWorkflowCondition() { if (/* condition verified*/) return true; else return false; }
La condizione myWorkflowCondition()
controlla sia la visualizzazione del bottone sia la possibilità di invocare myWorkflowAction()
.
In questo video riprendo il CRUD creato nel precedente tutorial e lo estendo con un semplice workflow basato su bottoni. Ho considerato la tabella 'm_product' ed in particolare la colonna 'isactive'. Isactive dice se un prodotto del catalogo è attivo oppure no. Mi sono immaginato un semplice workflow in cui isactive funziona da stato. Se il prodotto è attivo lo posso disattivare (cioè escluderlo dal catalogo dei prodotti correnti), se è inattivo lo posso riattivare.
Alcuni punti in evidenza tratti dal video
Fra parentesi quadre, il minuto/secondo a cui faccio riferimento:
[0:12] Nel CRUD, filtro i prodotti attivi tramite query HQL
[1:22] Connetto un'IDE Java all'istanza di Portofino 4
[3:51] Utilizzo l'annotazione @Button sul metodo deactivate()
[4:45] Utilizzo Hibernate per rendere persistente il cambiamento di stato
[5:47] Creo un CRUD “All products” per copia del CRUD “Current catalog”
[7:49] Utilizzo l'annotazione @Guard per abilitare/disabilitare i bottoni in modo condizionato
[9:38] Internazionalizzazione delle etichette dei bottoni