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

Tipi di variabile

E' possibile utilizzare i seguenti tipi di riferimenti di variabile nei file di macro.

Se vengono assegnate stringhe alle variabili definite in qualche modo da Net.Data, come ENVVAR, LIST, variabili di elenco condizioni, la variabile non esegue più le azioni nel modo definito. In altre parole, la variabile diventa una semplice variabile, contenente una stringa.

Consultare Riferimenti di Net.Data per la sintassi e gli esempi di ogni variabile.

Variabili condizionali

Le variabili condizionali consentono di definire un valore condizionale per una variabile utilizzando un metodo simile ad una struttura IF, THEN. Quando viene definita una variabile condizionale, è possibile specificare due valori di variabili. Se esiste il riferimento alla prima variabile, la variabile condizionale assume il primo valore; in caso contrario ne assume il secondo. La sintassi per una variabile condizionale è:

varA = varB ? "value_1" : "value_2"

Se varB è definito, varA="value_1", altrimenti varA="value_2". Ciò equivale ad utilizzare un blocco IF, come nell'esempio che segue:

%IF $(varB)
    varA = "value_1"
%ELSE
    varA = "value_2"
%ENDIF
 

Consultare Variabili di elenco per un esempio dell'uso delle variabili condizionali con le variabili di elenco.

Variabili di ambiente

E' possibile fare riferimento alle variabili di ambiente di Net.Data presenti nel processo in cui Net.Data è in esecuzione.

La sintassi per la definizione delle variabili di ambiente è:

%define var=%ENVVAR

In cui var è il nome della variabile in definizione.

Ad esempio, la variabile SERVER_NAME può essere definita come variabile di ambiente:

%define SERVER_NAME=%ENVVAR

E il riferimento:

The server is $(SERVER_NAME)

L'emissione è:

The server is www.software.ibm.com

Consultare Riferimenti di Net.Data per ulteriori informazioni sull'istruzione ENVVAR.

Variabili eseguibili

E' possibile richiamare altri programmi da un riferimento di variabile utilizzando le variabili eseguibili.

Definire le variabili eseguibili in una macro di Net.Data utilizzando la struttura di linguaggio EXEC nel blocco DEFINE. Per ulteriori informazioni sull'elemento di linguaggio EXEC, consultare il capitolo sulle strutture di linguaggio in Riferimenti di Net.Data. Nell'esempio che segue, la variabile runit viene definita per eseguire il programma eseguibile testProg:

%DEFINE runit=%exec "testProg"
runit diventa una variabile eseguibile.

Net.Data esegue il programma eseguibile quando rileva un riferimento valido di variabile in una macro di Net.Data. Ad esempio, il programma testProg viene eseguito quando un riferimento valido di variabile viene creato per la variabile runit in una macro di Net.Data.

Un metodo semplice è quello di fare riferimento ad una variabile eseguibile da un'altra definizione di variabile. L'esempio che segue dimostra questo metodo. La variabile date viene definita come una variabile eseguibile e dateRpt viene poi definita come un riferimento di variabile, che contiene la variabile eseguibile.

%DEFINE date=%exec "date"
%DEFINE dateRpt="Today is $(date)"

Laddove $(dateRpt) è presente nella macro di Net.Data, Net.Data ricerca il programma eseguibile date e una volta individuato, restituisce:

Martedì 11-07-1999

Quando Net.Data rileva una variabile eseguibile in un file di macro, ricerca il programma eseguibile di riferimento utilizzando il seguente metodo:

  1. Viene ricercata la variabile EXEC_PATH definita nel file di inizializzazione di Net.Data. Consultare EXEC_PATH per informazioni dettagliate.

  2. Se Net.Data non individua il programma, il sistema ricerca tra le directory definite dalla variabile di ambiente PATH del sistema o nell'elenco delle librerie. Se il programma eseguibile viene rilevato, Net.Data lo esegue.

Limite: Non impostare una variabile eseguibile sul valore dell'emissione del programma eseguibile chiamato. Nell'esempio precedente, il valore della variabile date è nullo. Se questa variabile viene utilizzata in una chiamata di funzione DTW_ASSIGN per assegnare il suo valore ad un'altra variabile, anche il valore della nuova variabile dopo l'assegnazione è nullo. L'unico scopo di una variabile eseguibile è richiamare il programma che essa definisce.

E' anche possibile trasferire parametri al programma da eseguire specificandoli con il nome programma della definizione della variabile. In questo esempio, i valori distance e time vengono trasferiti al programma calcMPH.

%DEFINE mph=%exec "calcMPH $(distance) $(time)" 

L'esempio successivo restituisce la data del sistema come parte del prospetto:

%DEFINE database="celdial"
 %DEFINE tstamp=%exec "date"
 
%FUNCTION(DTW_SQL) myQuery() {
SELECT CUSTNO, CUSTNAME from dist1.customer
%REPORT{
 %ROW{
<A HREF="/cgi-bin/db2www/exmp.d2w/report?value1=$(V1)&value2=$(V2)">
$(V1) $(V2) </A> <BR>
%}
%}
%}
 
%HTML (report){
<H1>Report made: $(tstamp) </H1>
@myQuery()
%}

Ogni prospetto visualizza la data per facilitare la traccia. In questo esempio vengono inseriti anche il numero e il nome del cliente in un collegamento per un'altra macro di Net.Data. Facendo clic su un cliente nel prospetto viene chiamata la macro di Net.Data exmp.d2w, trasferendovi sopra il numero e il nome del cliente.

Variabili nascoste

E' possibile utilizzare le variabili nascoste per nascondere il nome vero di una variabile ad altri utenti che possono visualizzare l'origine Web tramite il loro browser Web. Per definire una variabile nascosta:

  1. Definire una variabile per ogni stringa da nascondere, dopo l'ultimo riferimento della variabile contenuto nel blocco HTML. Le variabili vengono sempre definite con la struttura di linguaggio DEFINE una volta che sono state utilizzate nel blocco HTML, come indicato nell'esempio che segue. Le variabili $$(variable) sono riferite e poi definite.

  2. Nel blocco HTML in cui si fa riferimento alle variabili, utilizzare due segni di dollaro al posto di uno solo per il riferimento alle variabili. Ad esempio, $$(X) al posto di $(X).

    %HTML(INPUT) {
    <FORM ...>
    <P>Select fields to view:
    shanghai<SELECT NAME="Field">
    <OPTION VALUE="$$(name)"> Name
    <OPTION VALUE="$$(addr)"> Address
    ...
    </FORM>
    %}
     
    %DEFINE{
    name="customer.name"
    addr="customer.address"
    %}
     
    %FUNCTION(DTW_SQL) mySelect(){
      SELECT $(Field) FROM customer
    %}
     
    ...
    

    Quando un browser Web visualizza un modulo HTML, $$(name) e $$(addr) vengono sostituiti da $(name) e $(addr) rispettivamente, in modo che i nomi reali di colonna e di tabella non vengano mai visualizzati sul modulo HTML. Gli utenti di applicazioni non possono capire che i veri nomi delle variabili sono nascosti. Quando l'utente inoltra il modulo, viene chiamato il blocco HTML(REPORT). Quando @mySelect() chiama il blocco FUNCTION, $(Field) viene sostituito nell'istruzione SQL con customer.name o con customer.addr nell'interrogazione SQL.

Variabili di elenco

Utilizzare le variabili di elenco per creare una stringa delimitata di valori. Queste variabili si rivelano particolarmente utili nella creazione di un'interrogazione SQL con più voci come quelle rilevate in alcune clausole WHERE o HAVING. La sintassi per una variabile di elenco è:

%LIST " value_separator " nome_variabile

Attenzione: gli spazi hanno valore. Inserire uno spazio prima e dopo il separatore di valori per la maggior parte dei casi. La maggior parte delle interrogazioni utilizzano operatori booleani o matematici (ad esempio, AND, OR, or >) come separatore di valore. L'esempio che segue illustra l'uso delle variabili condizionali, nascoste e di elenco:

%HTML(INPUT) {
<FORM METHOD="POST" ACTION="/cgi-bin/db2www/example2.d2w/report">
<H2>Select one or more cities:</H2>
<INPUT TYPE="checkbox" NAME="conditions" VALUE="$$(cond1)">Sao Paolo<BR>
<INPUT TYPE="checkbox" NAME="conditions" VALUE="$$(cond2)">Seattle<BR>
<INPUT TYPE="checkbox" NAME="conditions" VALUE="$$(cond3)">Shanghai<BR>
<INPUT TYPE="submit" VALUE="Submit Query">
</FORM>
%}
 
%DEFINE{
DATABASE="custcity"
 %LIST " OR " conditions
cond1="cond1='Sao Paolo'"
cond2="cond2='Seattle'"
cond3="cond3='Shanghai'"
whereClause= ? "WHERE $(conditions)" : ""
%}
 
%FUNCTION(DTW_SQL) mySelect(){
SELECT name, city FROM citylist
$(whereClause)
%}
 
%HTML(REPORT) {
@mySelect()
%}

Nel modulo HTML, se non sono contrassegnate caselle, conditions è null, così anche whereClause è null nell'interrogazione. In caso contrario, whereClause ha i valori selezionati separati da OR. Ad esempio se vengono selezionate tutte e tre le città dell'esempio, l'interrogazione SQL è:

SELECT name, city FROM citylist
WHERE cond1='Sao Paolo' OR cond2='Seattle' OR cond3='Shanghai'

Questo esempio mostra che Seattle è selezionata, il che risulta in questa interrogazione SQL:

SELECT name, city FROM citylist
WHERE cond1='Seattle'

Variabili di tabella

La variabile di tabella definisce una raccolta di dati correlati. Essa contiene una serie di record identici o righe ed una serie di nomi colonna che descrivono i campi di ogni riga. Una tabella viene definita nella macro di Net.Data come nella seguente istruzione:

%DEFINE myTable=%TABLE(30)

Il numero che segue TABLE è il limite del numero delle righe che questa tabella può contenere. Per specificare una tabella con nessun limite di righe, utilizzare il valore predefinito o specificare ALL, come indicato in questi esempi:

%DEFINE myTable2=%TABLE
%DEFINE myTable3=%TABLE(ALL)

Quando viene definita una tabella, essa presenta zero righe e zero colonne e nessuna memoria assegnata. L'unico modo in cui è possibile compilare una tabella con dei valori è di trasferirla come parametro OUT o INOUT ad una funzione o utilizzando le funzioni tabella integrate fornite da Net.Data. L'ambiente di linguaggio DTW_SQL inserisce automaticamente i risultati di un'istruzione SELECT in una tabella.

Per tutti gli altri ambienti di linguaggio, come DTW_REXX o DTW_PERL, l'ambiente di linguaggio non imposta automaticamente i valori della tabella. Piuttosto i singoli elementi della tabella sono resi disponibili all'interprete del linguaggio nativo come parametri di emissione e vanno poi impostati tramite lo script o il programma in esecuzione. Consultare Uso degli ambienti di linguaggio per ulteriori informazioni su come gli ambienti di linguaggio utilizzano le variabili di tabella.

E' possibile trasferire una tabella tra le funzioni facendo riferimento al nome della variabile di tabella. I riferimenti ai singoli elementi della tabella possono essere eseguiti in un blocco REPORT di una funzione. Consultare Variabili di elaborazione tabella per informazioni dettagliate. Le variabili di tabella vengono generalmente compilate con i valori contenuti in una funzione SQL e poi utilizzate come immissione in un prospetto, sia nella funzione SQL che in un'altra funzione una volta trasferiti a quella funzione come un parametro. E' possibile trasferire variabili di tabella come parametri IN, OUT o INOUT ad una qualsiasi funzione non SQL. Le tabelle possono essere trasferite alle funzioni SQL solo come parametri OUT.

I nomi colonna e i valori dei campi di una tabella sono indicati come elementi di una schiera con un'origine 1, invece di impiegare lo standard della convenzione dei linguaggi C e C++ di avviare le schiere da 0.

Vari tipi di variabili

Si tratta di variabili definite da Net.Data che è possibile utilizzare per:

Queste variabili possono contenere un valore predefinito stabilito da Net.Data o valori impostati dall'utente. Ad esempio, Net.Data stabilisce il valore della variabile DTW_CURRENT_FILENAME in base al file corrente al momento elaborato, laddove è possibile specificare se Net.Data elimina gli spazi causati dai tabulatori e dai caratteri di nuova riga.

Le variabili predefinite vengono utilizzate come riferimenti di variabile all'interno del file di macro e forniscono le informazioni sullo stato corrente dei file, sulle date o sullo stato di una chiamata di funzione. Ad esempio, per richiamare il nome del file corrente, è possibile utilizzare:

<p>This file is <i>$(DTW_CURRENT_FILENAME)</i>.</P>

I valori modificabili della variabile vengono generalmente impostati utilizzando un'istruzione DEFINE o una funzione @DTW_ASSIGN() e consentono di intervenire sul modo in cui viene elaborato il file di macro di Net.Data. Ad esempio, per specificare se lo spazio viene eliminato, è possibile utilizzare la seguente istruzione DEFINE:

%DEFINE DTW_REMOVE_WS="YES"

Variabili di elaborazione tabella

Net.Data definisce le variabili di elaborazione tabella per i blocchi REPORT e ROW. Utilizzare queste variabili per i riferimenti ai valori dalle interrogazioni SQL e dalle chiamate di funzione.

Le variabili di elaborazione tabella presentano un valore predefinito stabilito da Net.Data. Queste variabili consentono di fare riferimento ai valori dalle serie di risultati di interrogazioni SQL o di chiamate di funzione in base alla colonna, alla riga o al campo in esecuzione. E' anche possibile accedere alle informazioni sul numero delle righe elaborate o ad un elenco di tutti i nomi colonna.

Ad esempio, poichè Net.Data elabora una serie di risultati da un'interrogazione SQL, viene assegnato il valore della variabile Nn per ogni nome colonna corrente, cioè N1 viene assegnato alla prima colonna, N2 alla seconda colonna e così via. E' possibile fare riferimento al nome colonna corrente per l'emissione della pagina Web.

Utilizzare le variabili di elaborazione tabella come riferimenti di variabile all'interno del file di macro. Ad esempio, per richiamare il nome della colonna corrente in elaborazione, è possibile utilizzare:

<p>Column 1 is <i>$(N1)</i>.</P>

Le variabili di elaborazione della tabella forniscono anche le informazioni sui risultati di un'interrogazione. E' possibile fare riferimento alla variabile TOTAL_ROWS nella macro per indicare quante righe vengono restituite da un'interrogazione SQL, come nell'esempio che segue:

Names found: $(TOTAL_ROWS)

Alcune delle variabili di elaborazione tabella vengono condizionate da altre variabili o da funzioni integrate. Ad esempio, TOTAL_ROWS richiede che sia attivata la variabile dell'ambiente di linguaggio SQL DTW_SET_TOTAL_ROWS in modo che Net.Data assegni il valore di TOTAL_ROWS quando vengono elaborati i risultati da un'interrogazione SQL o da una chiamata di funzione come nell'esempio che segue:

%DEFINE DTW_SET_TOTAL_ROWS="YES"
...
 
Names found: $(TOTAL_ROWS)

Variabili di prospetto

Net.Data visualizza l'emissione Web generata dal file di macro nel formato di prospetto predefinito. Il prospetto predefinito viene visualizzato in formato tabella utilizzndo le tag <PRE> </PRE>. E possibile sovrapporre il prospetto predefinito definendo un blocco REPORT con le istruzioni per la visualizzazione dell'emissione o utilizzando una delle variabili di prospetto per evitare la produzione del prospetto predefinito.

Le variabili di prospetto aiutano a personalizzare il modo in cui l'emissione Web viene visualizzata e usata con i prospetti predefiniti e con le tabelle di Net.Data. E' necessario definire queste variabili prima di utilizzarle con un'istruzione DEFINE o con una funzione @DTW_ASSIGN().

Le variabili di prospetto specificano la spaziatura, la sostituzione di formati di prospetto predefiniti, specificano l'emissione della tabella HTML in contrapposizione a quella predefinita ed altre funzioni di visualizzazione. Ad esempio, è possibile utilizzare la variabile ALIGN per controllare la spaziatura anteriore e posteriore per le variabili di elaborazione tabella. L'esempio che segue utilizza la variabile ALIGN per separare con uno spazio ogni nome colonna in un elenco restituito da un'interrogazione.

%DEFINE ALIGN="YES"
...
<p>Your query was on these columns: $(NLIST)

La variabile di prospetto START_ROW_NUM consente di determinare su quale riga avviare la visualizzazione dei risultati di un'interrogazione. Ad esempio, il valore di variabile di seguito riportato specifica che Net.Data avvierà la visualizzazione dei risultati di un'interrogazione alla terza riga.

%DEFINE START_ROW_NUM = "3"

E' anche possibile stabilire che Net.Data utilizzi le tag HTML per la formattazione predefinita. Con DTW_HTML_TABLE impostato su YES, viene generata una tabella HTML al posto di una tabella di testo formattata.

%DEFINE DTW_HTML_TABLE="YES"
 
%FUNCTION(DTW_SQL){
SELECT NAME, ADDRESS FROM $(qTable)
%}

Variabili dell'ambiente di linguaggio

Queste variabili vengono utilizzate con gli ambienti di linguaggio e interessano il modo in cui l'ambiente di linguaggio elabora una richiesta. E' necessario definire queste variabili prima di utilizzarle, tramite un'istruzione DEFINE o con una funzione @DTW_ASSIGN(). Impostare o fare riferimento alle variabili, in modo appropriato, dell'ambiente di linguaggio nei blocchi macro di Net.Data.

Con queste variabili, è possibile eseguire attività come stabilire connessioni ai database, ed attivare il supporto NLS.

Ad esempio, è possibile utilizzare la variabile SQL_STATE per accedere o visualizzare il valore di stato SQL restituito dal database.

%FUNCTION (DTW_SQL) val1() {
  select * from customer
%REPORT {
 ...
   %ROW {
 ...
%}
 SQLSTATE=$(SQL_STATE)
%}


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