0.13   Le azioni


CONDIZIONI, ISTRUZIONI, LOOP ON VIEW, OPERAZIONI

Questo capitolo completa il meccanismo di sviluppo ad eventi.

Vedremo come o2runtime verifichi gli eventi e scateni le azioni.


Obiettivi

Al termine del capitolo il programmatore sarà in grado di:


Introduzione

Le azioni costituiscono la base del modello esecutivo di o2architecture.

Un’azione è costituita da un numero arbitrario di istruzioni (operations).

Le azioni possono invocare l’esecuzione di altre azioni o di programmi e legarsi fra loro in catene esecutive che, con la presenza di programmi dotati di interfaccia, possono estendersi a più interazioni client-server.

Ogni catena esecutiva inizia con il verificarsi di un evento (vedi capitolo relativo).

Il programmatore non deve preoccuparsi della natura degli eventi e delle azioni che andrà a mettere in relazione, poiché l’o2runtime si occuperà di creare le condizioni necessarie all’eseguibilità di ogni istruzione richiesta, rendendo disponibili viste sui dati e informazioni provenienti dal client in un unico contesto.


0.13.1   Le istruzioni


Ogni azione è costituita da un numero variabile di istruzioni, righe della tabella Operations.

Nella tabella Operations usare i seguenti comandi:

Ogni istruzione inizia con l’indicazione di un operatore esecutivo: premere SPACE o una lettera sulla cella Operator per aprire il combo box di scelta dell’operatore.

Si accede alle interfacce specifiche di ogni istruzione premendo F5 sulle celle Object e Arguments: al momento della creazione di una nuova istruzione le interfacce vengono presentate automaticamente allo sviluppatore. Vedere, di seguito, il dettaglio degli operatori.

Se verrà indicata un’espressione nella cella Condizion (F5 per inserire o selezionare dalla lista delle espressioni) per un’istruzione, tale istruzione verrà eseguita solo se l’espressione sarà valutata a "true". La valutazione dell’espressione verrà fatta al momento dell’esecuzione dell’istruzione e nel contesto derivante dalle altre istruzioni. Questo significa che non necessariamente blocchi di istruzioni con la stessa espressione di Condition verranno eseguiti in blocco.


0.13.2   Gli operatori


Gli operatori costituiscono i verbi o metodi dei processi esecutivi. La complessità e la portata delle operazioni svolte da ogni istruzione, così come l’interfaccia presentata al programmatore, variano a seconda dell’operatore selezionato. Vediamo, quindi, i singoli operatori nel dettaglio:


0.13.2.1   Call program


L’operatore Call program sospende l’attuale catena esecutiva per passare il controllo ad un altro programma: l’esecuzione dell’azione corrente verrà ripresa al termine dell’esecuzione del programma chiamato.

Se il programma chiamato è di tipo batch (cioè privo di interfacce che richiedano l’interattività dell’operatore) l’esecuzione dell’azione corrente verrà ripresa prima di ritornare al client, dopo aver esaurito la catena esecutiva scatenata dalla sua Initial action.

Se, invece, il programma chiamato è dotato di interfaccia, eseguita e conclusa la Initial action, la catena esecutiva si arresterà sulla presentazione client dell’interfaccia e l’esecuzione dell’azione corrente riprenderà solo dopo che l’operatore avrà chiuso il programma chiamato.

L’istruzione Call program presenterà due interfacce: la prima è l’elenco dei programmi disponibili nell’applicazione da cui scegliere il programma da chiamare; la seconda è l’interfaccia di definizione dei paratetri.

Per ulteriori dettagli su questo operatore e sulle tecniche di passaggio di parametri vedi sezione su Call program e passaggio dei parametri.


0.13.2.2   Close program


L’operatore Close program non richiede parametri e serve a terminare l’esecuzione del programma corrente, interrompendo l’attuale catena esecutiva e chiudendo tutte le finestre eventualmente aperte.

Nota bene: le istruzioni eventualmente presenti nell’azione, successive all’istruzione di Close program, qualora la condition per questa istruzione venga valutata a "true", non saranno eseguite!


0.13.2.3   Debugger


L’operatore Debugger non richiede parametri e serve ad eseguire il programma di debugging. Questo operatore si comporta come una normale istruzione di Call program al programma "debugger", il quale mostrerà all’operatore/sviluppatore una complessa interfaccia, dalla quale sarà possibile recuperare informazioni su ogni elemento dell’applicazione, delle viste e dei programmi coinvolti nell’attuale catena esecutiva.

Nota bene: l’operatore Debugger sarà eseguito solo se l’utente è loggato con credenziali di sviluppatore, altrimenti l’istruzione non avrà alcun effetto.


0.13.2.4   Execute action


Questo operatore consente di trasferire il controllo ad un’altra azione del programma in esecuzione, sospendendo l’esecuzione dell’azione corrente fino al termine dell’azione chiamata. L’operatore Execute action, in oltre, consente di reiterare l’esecuzione di un’azione in base a due diversi criterî:

  1. per ogni record di una vista fino all’esaurimento di tutto il recordset
  2. fino alla valutazione a "true" di un’espressione

I parametri richiesti sono:

Quando una vista viene specificata (premendo F5 sul campo Loop on view si accede all’elenco e alla selezione delle viste disponibili) o2runtime svolgerà le seguenti operazioni:

  1. La vista selezionata verrà posizionata sul primo (Direction = "ascending") o sull’ultimo (Direction = "Descending") record del recordset.
  2. Ad ogni giro del loop verrà valutata la condizione di fine e, fino al suo verificarsi, il puntatore di selezione della vista verrà fatto avanzare (o retrocedere) fino al totale esaurimento del recordset.
  3. Ad ogni giro del loop verrà eseguita l’azione indicata.

Al verificarsi della condizione di End action o all’esaurirsi del recordset l’istruzione di Execute action sarà terminata.

Nota bene: è importante che le condizioni indicate si risolvano sempre in un esito, cioè non creino loop infiniti. Ad esempio: un’istruzione di Execute action senza indicazione di view e con condizione di fine che valuti sempre a "false" creerà un loop infinito, così come un’azione che, reiterata su una vista fino al suo esaurimento, ogni volta ne ripristini il puntatore di selezione.


0.13.2.5   Goto


L’istruzione Goto termina in maniera irreversibile l’attuale catena esecutiva e chiude tutti i programmi eventualmente aperti. Il controllo viene passato ad un nuovo programma (dalla cui Initial action partirà la nuova catena esecutiva) o ad un indirizzo web (url) che solitamente condurrà l’operatore fuori dalla sessione o2.

L’interfaccia chiederà di selezionare tra i due possibili esiti (Program o Url).

Nel caso di Url sarà possibile inserire nella cella Arguments un’espressione il cui risultato sarà usato come indirizzo web, così come lo si scriverebbe nella barra degli indirizzi di un browser.

Nel caso di Program sarà possibile scegliere il programma fra quelli definiti nell’applicazione o inserire un’espressione, il cui risultato sarà interpretato come nome del programma da eseguire. Sarà possibile passare parametri al programma chiamato ma senza attenderne ritorno.


0.13.2.6   Input/output


L’istruzione Input/Output permette di produrre file XML a partire dai dati delle viste.


0.13.2.7   Message


L’operatore Message permette di visualizzare un messaggio al client. Il messaggio può essere di due tipi, fra cui l’interfaccia chiederà di scegliere:

  1. Message box: il messaggio sarà comunicato al client come alert di javascript, cioè una finestra modale con un solo pulsante di Ok e con il testo del messaggio. Se più messaggi verranno inviati al client in una stessa sessione esecutiva del server, verranno visualizzati uno di seguito all’altro, nell’ordine in cui sono stati invocati.
  2. Status bar: il testo del messaggio comparirà nella barra di stato (se visibile) della form attiva. Nel caso che più messaggi di questo tipo vengano inviati al client, soltanto l’ultimo sarà visibile all’operatore.

Il messaggio è la stringa risultante dall’espressione indicata in Arguments.


0.13.2.8   Print


Produce un file PDF, a partire da una serie di file XML prodotti dalle istruzioni di Input/output.


0.13.2.9   Recordset


L’operatore Recordset rende disponibili una serie di funzionalità sulle viste del programma.

Vediamole in dettaglio:


0.13.2.10   Remark


L’operatore Remark consente di inserire un commento fra le varie istruzioni di un’azione, al fine di inserire note per la manutenzione, ottenere aspetti grafici che aiutino la lettura e quant’altro serva allo sviluppatore: questa istruzione non ha alcun effetto di runtime. Per accedere al testo della nota premere F5 sulla cella Object.


0.13.2.11   Return parameter


Valorizza un parametro del programma, in modo da restituire un valore al programma chiamante: a tal fine il parametro deve essere passato by reference (vedi sezione sul passaggio di parametri).

F5 sulla cella Object per selezionare il parametro dall’elenco dei parametri definiti e F5 sulla cella Arguments per impostare l’espressione di valore.


0.13.2.12   Set menu


Imposta il menu selezionato dall’elenco (F5 sulla cella Object) come menu di applicazione, ovvero lo rende visibile come barra dei menu, mentre ogni suo sottomenu sarà accessibile come menu a tendina.


0.13.2.13   Update


Le istruzioni di Update costituiscono in o2 il modo di assegnare un valore ad un campo o ad una variabile. A seguito di un’istruzione Update il campo indicato (F5 sulla cella Object) prenderà il valore ritornato dall’espressione di valore (F5 sulla cella Arguments).

Nota bene: non lasciarsi ingannare dal nome dell’operatore. Se si esegue un’istruzione di Update sul campo di una vista, la modifica non sarà comunicata al database (e quindi non sarà scritta in effettiva su disco) fino alla successiva istruzione di Recordset Postrow. Prima di allora l’esecuzione si può interrompere (Close program o Goto) oppure può cambiare il puntatore di selezione della vista o intervenire azioni di Recordset Undo: in ognuno di questi, e in altri casi, le modifiche apportate ai campi con le istruzioni Update non verranno riportate su database.


0.13.2.14   Execute script


L’istruzione Execute script accetta come solo parametro (F5 sulla cella Arguments) un’espressione da valutare. Il valore di ritorno dell’espressione viene ignorato ma la sua valutazione costituisce il metodo di base per l’esecuzione di script PHP.

Quindi, solitamente, l’espressione avrà una forma del tipo: