Guida all' associazione di logiche applicative al Content Panel

Introduzione

In guigen per implementare logiche dinamiche tipicamente si fa ricorso ai commands. Gli eventi della vita dell'applicazione in cui può essere inserita la modellazione della logica dinamica sono i seguenti:

  1. inzializzazione dell' applicazione
  2. inizialiazzazione\refresh\ingresso in un ContentPanel
  3. evento di user interacion (intercettato da un EventHandler)

Escludendo il caso dell'inizializzazione applicativa e concentrandosi sugli eventi relativi al ContentPanel, per poter modellare questa logica dinamica è possibile utilizzare l'elemento CPCommand (child del nodo raggruppatore CPCommands). Il CPCommand è caratterizzato da un nodo child di tipo command nel quale è possibile modellare la logica vera e propria, e una property execute che definisce il momento, l'evento, in cui questo comando viene attivato :
  1. ON_INIT
  2. ON_REFRESH
  3. ON_ENTER
  4. BEFORE_EVENTS
  5. AFTER_EVENTS

Con una opportuna combinazione di logiche distribuite nel vari momenti di innesco è possibile definire in modo molto fine la logica dinamica delle varie schermate.


Esempio CPCommand



Tipologie di innesco (execute) dei CPCommand

Operation Descrizione Esempi di utilizzo Codice Generato Check
ON_INIT La logica appliucativa è eseguita ad ogni primo ingresso nel ContentPanel(per sessione). Viene utilizzato tipicamente per eseguire le operazioni che non è necessario ripetere durante il flusso e che potrebbero ridurre le capacità prestazionali se eseguite ad ogni interazione client/server
  1. Caricamento Combo dal contenuto immutabile (es. elenco regioni)
Il programma modellato sul CPCommand viene compilato in una struttura di comandi (pattern command); l'invocazione avviene nel metodo prepare().
Poichè il prepare() viene invocato prima di ogni action, per vincolare l'esecuzione della logica solo al primo ingresso viene testata la property di sessione CPCommandInit<ContentPanel.name>.
  1. un ContentPanel non può contenere più di un CPCommand di tipo ON_INIT
ON_REFRESH La logica applicativa è eseguita ad ogni azione di interazione utente eseguita sulla schermata (ingresso nella schermata, evento di interazione con un widget, ...)
NOTE:
Se in pagina viene inserito un CPCommand ON_INIT allora l'ON_REFRESH non verrà eseguito al primo accesso alla schermata.
Se in pagina viene inserito un CPCommand ON_ENTER allora l'ON_REFRESH non verrà eseguito in concomitanza al nuovo ingresso al ContentPanel.
La logica associata all' ON_REFRESH è analoga a quella eseguita dal onRefreshCommand definito come nodo figlio diretto del ContentPanel, il quale è da considerarsi deprecato.
Il programma modellato sul CPCommand viene compilato in una struttura di comandi (pattern command); l'invocazione avviene nel metodo prepare().
In questo modo la logica verrà eseguita ad ogni richiamo della action.
Se sono modellati contemporaneamente sia l'ON_INIT che l'ON_REFRESH, poichè il metodo prepare() viene invocato prima dell'esecuzione della action, per fare in modo che l'esecuzione della logica avvenga solo negli accessi successivi al primo vengono testate la variabile in sessione CPCommandInit<ContentPanel.name> e currentContentPanel
  1. un ContentPanel non può contenere un CPCommand di tipo ON_REFRESH e un onRefreshCommand contemporaneamente
  2. un ContentPanel non può contenere più di un CPCommand di tipo ON_REFRESH
ON_ENTER La logica applicativa è eseguita ad ogni accesso ad una schermata. Un tipico utilizzo di questo punto di innesco è quello di eseguire le logiche applicative dipendenti dal flusso di navigazione e che devono essere eseguite a ogni nuovo ingresso in pagina
  1. Precaricamento dati in schermata
    (es. funzionalità modifica in un gestionale)
Il programma modellato sul CPCommand viene compilato in una struttura di comandi (pattern command); L'invocazione avviene nel metodo execute() della action, ossia il metodo che viene invocato ad ogni ingresso in pagina
  1. un ContentPanel non può contenere più di un CPCommand di tipo ON_ENTER
BEFORE_EVENTS La logica è eseguita prima dell' esecuzione della logica associata ad un eventHandler. La logica è la medesima per tutti gli EventHandler presenti nella schermata Il programma modellato sul CPCommand viene compilato in una struttura di comandi (pattern command); L'invocazione avviene nel metodo handle_<widget>_<EVENTO>(), prima dell'invocazione del metodo doCommand() del comando associato all'event handler
  1. un ContentPanel non può contenere più di un CPCommand di tipo BEFORE_EVENTS
AFTER_EVENTS La logica è eseguita dopo l' esecuzione della logica associata ad un eventHandler. La logica è la medesima per tutti gli EventHandler presenti nella schermata Il programma modellato sul CPCommand viene compilato in una struttura di comandi (pattern command); L'invocazione avviene nel metodo handle_<widget>_<EVENTO>(), subito dopo l'invocazione del metodo doCommand() del comando associato all'event handler
  1. un ContentPanel non può contenere più di un CPCommand di tipo BEFORE_EVENTS

Riepilogo delle sequenze di esecuzione delle logiche nei vari punti di innesco, classificate per "evento" associato al content panel

In alcuni casi la sequenza delle logiche eseguite può essere differente a seconda che l'interazione sia realizzata in modalità ajax oppure in modalità non ajax.

Eventi su Content Panel Logiche eseguite
Primo ingresso su ContentPanel per sessione applicativa
Modalià non Ajax Modalià Ajax *
CP Destinazione
  1. Operation Non EseguitaON_INIT
  2. Operation EseguitaON_REFRESH
  3. Operation Non EseguitaON_ENTER
CP Destinazione (prima chiamata)
  1. Operation Non EseguitaON_INIT
  2. Operation EseguitaON_REFRESH
  3. Operation Non EseguitaON_ENTER
CP Destinazione (seconda chiamta)
  1. Operation Non EseguitaON_INIT
  2. Operation EseguitaON_REFRESH
  3. Operation Non EseguitaON_ENTER
Nuovo ingresso al ContentPanel (diverso da primo ingresso per sessione)
Modalià non Ajax Modalià Ajax *
CP Destinazione
  1. Operation Non EseguitaON_INIT
  2. Operation EseguitaON_REFRESH
  3. Operation Non EseguitaON_ENTER
CP Destinazione (prima chiamata)
  1. Operation Non EseguitaON_INIT
  2. Operation EseguitaON_REFRESH
  3. Operation Non EseguitaON_ENTER
CP Destinazione (seconda chiamta)
  1. Operation Non EseguitaON_INIT
  2. Operation EseguitaON_REFRESH
  3. Operation Non EseguitaON_ENTER
Esecuzione logica di un EventHandler (es. OnClick Button) CP che contiene il widget che ha originato l'evento.
  1. Operation EseguitaImpostazione Parametri a fronte della request HTTP
  2. Operation EseguitaON_REFRESH
  3. Operation EseguitaBEFORE_EVENTS
  4. Operation EseguitaLogica EventHandler
  5. Operation EseguitaAFTER_EVENTS
  6. (in caso di JumpCommand vengono anche eseguite le logiche associate al pannello destinazione)
  1. Eseguito
  2. Non Eseguito
* Salto verso il CP Destinazione tramite un JumpCommand in modalità Ajax.
Effetto modalità Ajax: viene effettuata una seconda chiamata JS sull'action del ContentPanel di destinazione
Nella catena vengono mostrati le execute invocate nelle 2 chiamate.