Net.Data: Guida alla gestione e alla programmazione per OS/400


Esempio di macro persistente

La seguente macro semplificata contiene blocchi HTML multipli eseguiti in una transazione singola:

@dtw_static()
%define a = "0"
%define(transient) b = "0"
%define handle = ""
@dtw_rtvhandle(handle)
 
%html(report) {
@dtw_accept(handle)
a = $(a)<br>
b = $(b)<br>
@dtw_add(a, "2", a)
@dtw_add(b, "2", b)
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/report2">
fare clic qui per continuare</a><br>
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/quit">
fare clic qui per uscire</a><br>
%}
 
%html(report2) {
@dtw_accept(handle)
a = $(a)<br>
b = $(b)<br>
@dtw_add(a, "2", a)
@dtw_add(b, "2", b)
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/report3">
Fare clic qui per continuare</a><br>
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/quit">
Fare clic qui per uscire</a><br>
%}
 
%html(report3) {
@dtw_accept(handle)
a = $(a)<br>
b = $(b)<br>
@dtw_add(a, "2", a)
@dtw_add(b, "2", b)
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/quit">
Fare clic qui per uscire</a><br>
%}
 
%html(quit) {
@dtw_terminate()
a = $(a)<br>
b = $(b)<br>
done
%}

Se si considera che la prima chiamata è per il blocco HTML report, Net.Data:

  1. Chiama la funzione DTW_STATIC() che indica che la macro è persistente.

  2. Crea la variabile a come una variabile STATIC poichè il valore predefinito per le macro persistenti è STATIC.

  3. Crea la variabile b come una variabile TRANSIENT poichè viene esplicitamente definita con l'attributo TRANSIENT.

  4. Chiama DTW_RTVHANDLE(), che genera un gestore transazioni e lo inserisce nella variabile handle.

  5. Avvia l'elaborazione del blocco HTML report e chiama DTW_ACCEPT(), che indica a Net.Data il gestore transazioni per quella transazione.

  6. Rileva l'emissione da inviare al browser, che induce Net.Data ad inviare l'intestazione HTTP al server Web che indica l'avvio di una transazione.

  7. Visualizza la pagina HTML. Le variabili a e b hanno entrambe un valore 0.

Dopo che l'emissione della prima pagina viene inviata al browser, gli utenti possono scegliere di continuare la transazione o di uscire. Nel primo caso, il server Web richiama l'URL:

/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/report2

Il server Web riconosce il gestore transazioni come quello specificato da Net.Data nell'intestazione HTTP. Net.Data viene richiamato come programma CGI persistente, che significa che la chiamata macro è parte della transazione corrente.

Quando viene chiamato un blocco HTML report2, Net.Data:

  1. Chiama la funzione DTW_STATIC() che indica che la macro è persistente.

  2. Riconosce che la variabile a è una variabile STATIC e mantiene il valore corrente invece di riportarlo a 0.

  3. Riconosce che la variabile b è una variabile TRANSIENT, crea una nuova istanza della variabile e la riporta a 0.

  4. Chiama DTW_RTVHANDLE(), che genera un gestore transazioni e lo inserisce nella variabile handle.

  5. Avvia l'elaborazione del blocco HTML report2 e chiama DTW_ACCEPT(), che indica a Net.Data il gestore transazioni per quella transazione.

  6. Rileva l'emissione da inviare al browser, che induce Net.Data ad inviare l'intestazione HTTP al server che indica che una transazione continua.

  7. Visualizza la pagina HTML. La variabile a avrà un valore 2 e la variabile b un valore 0. Il valore della variabile a viene salvato dalla precedente chiamata poichè si tratta di una variabile statica. Il valore della variabile b viene riportato a 0.

Dopo che la seconda pagina viene inviata al browser, l'utente può scegliere di continuare la transazione o di uscire. Nel secondo caso, il server Web richiama l'URL:

/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/quit

Il server Web riconosce il gestore transazioni come quello specificato da Net.Data nell'intestazione HTTP e richiede Net.Data come programma CGI persistente, che significa che la chiamata della macro è parte della transazione corrente.

Quando viene chiamato un blocco HTML quit, Net.Data:

  1. Chiama la funzione DTW_STATIC() che indica che la macro è persistente.

  2. Riconosce che la variabile a è una variabile STATIC e mantiene il valore corrente invece di riportarlo a 0.

  3. Riconosce che la variabile b è una variabile TRANSIENT, crea una nuova istanza della variabile e la riporta a 0.

  4. Chiama DTW_RTVHANDLE(), che genera un gestore transazioni e lo inserisce nella variabile handle.

  5. Avvia l'elaborazione del blocco HTML quit e chiama DTW_TERMINATE(), che indica a Net.Data che si tratta dell'ultima chiamata per questa transazione.

  6. Rileva l'emissione da inviare al browser, che induce Net.Data ad inviare l'intestazione HTTP al server che indica che una transazione sta terminando.

  7. Visualizza la pagina HTML. La variabile a ha un valore 4 e la variabile b un valore 0.

  8. Aggiorna tutte le variabili e le altre risorse nell'ambito del livello di transazione, poichè è stata eseguita la chiamata DTW_TERMINATE().


[ Inizio pagina | Pagina precedente | Pagina successiva | Indice | Indice analitico ]