Net.Data Verwaltung und Programmierung für OS/2, Windows NT und UNIX

Variablenarten

Sie können die folgenden Arten von Variablenverweisen in Ihren Makrodateien verwenden:

Wenn Sie Variablen, die in spezieller Weise durch Net.Data definiert sind (z. B. ENVVAR, LIST oder Bedingungslistenvariablen) Zeichenfolgen zuordnen, funktioniert die Variable nicht mehr in der definierten Weise. Das heißt, die Variable wird zu einer regulären Variablen, die eine Zeichenfolge enthält.

Bedingungsvariablen

Bedingungsvariablen ermöglichen Ihnen, einen bedingten Wert für eine Variable mit Hilfe einer Methode zu definieren, die einem IF-THEN-Konstrukt ähnlich ist. Beim Definieren einer Bedingungsvariablen können Sie zwei mögliche Variablenwerte angeben. Wenn die erste Variable, auf die Sie verweisen, existiert, erhält die Bedingungsvariable den ersten Wert. Ansonsten erhält die Bedingungsvariable den zweiten Wert. Die Syntax für eine Bedingungsvariable sieht wie folgt aus:

varA = varB ? "value_1" : "value_2"

Wenn varB definiert ist, gilt varA="value_1", andernfalls gilt varA="value_2". Dies entspricht der Verwendung eines IF-Blocks wie im folgenden Beispiel:

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

Im Abschnitt Listenvariablen finden Sie ein Beispiel für die Verwendung von Bedingungsvariablen mit Listenvariablen.

Umgebungsvariablen

Sie können auf Net.Data-Umgebungsvariablen verweisen, die in dem Prozeß existieren, unter dem Net.Data ausgeführt wird.

Die Syntax zur Definition von Umgebungsvariablen sieht folgendermaßen aus:

%define var=%ENVVAR

Dabei ist var der Name der Variable, die definiert wird.

Zum Beispiel kann die Variable SERVER_NAME als Umgebungsvariable definiert werden:

%define SERVER_NAME=%ENVVAR

Ein Verweis auf sie könnte wie folgt aussehen:

The server is $(SERVER_NAME)

Die Ausgabe sähe wie folgt aus:

The server is www.software.ibm.com

Im Handbuch Net.Data Reference finden Sie weitere Informationen zur Anweisung ENVVAR.

Ausführbare Variablen

Sie können über einen Variablenverweis mit Hilfe ausführbarer Variablen andere Programme aufrufen.

Ausführbare Variablen werden in einem Net.Data-Makro mit Hilfe des Sprachkonstrukts EXEC im DEFINE-Block definiert. Weitere Informationen zum Sprachelement EXEC finden Sie im Kapitel zu Sprachkonstrukten im Handbuch Net.Data Reference. Im folgenden Beispiel wird die Variable runit zur Ausführung des ausführbaren Programms testProg definiert:

%DEFINE runit=%exec "testProg"

Die Variable runit wird zu einer ausführbaren Variablen.

Net.Data führt das ausführbare Programm aus, wenn ein gültiger Variablenverweis in einem Net.Data-Makro erkannt wird. Zum Beispiel wird das Programm testProg ausgeführt, wenn in einem Net.Data-Makro ein gültiger Variablenverweis auf die Variable runit enthalten ist.

Eine einfache Methode besteht darin, auf eine ausführbare Variable aus einer anderen Variablendefinition heraus zu verweisen. Das folgende Beispiel illustriert diese Methode. Die Variable date wird als ausführbare Variable definiert. Anschließend wird dateRpt als Variablenverweis definiert, der die ausführbare Variable enthält.

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

Für jedes Vorkommen des Variablenverweises $(dateRpt) im Net.Data-Makro sucht Net.Data nach dem ausführbaren Programm date. Wenn das Programm gefunden wird, liefert Net.Data den Wert:

Today is Tue 11-07-1999

Wenn Net.Data eine ausführbare Variable in einer Makrodatei feststellt, sucht Net.Data das angegebene ausführbare Programm nach folgender Methode:

  1. Es durchsucht die Verzeichnisse, die in der Net.Data-Initialisierungsdatei durch EXEC_PATH definiert sind. Nähere Informationen hierzu finden Sie unter EXEC_PATH.

  2. Wenn Net.Data das Programm nicht findet, durchsucht das System die Verzeichnisse, die in der Umgebungsvariablen PATH bzw. in der Bibliothekenliste (Library List) definiert sind. Wird das ausführbare Programm gefunden, führt Net.Data das Programm aus.

Einschränkung: Setzen Sie eine ausführbare Variable nicht auf den Wert der Ausgabe des aufgerufenen ausführbaren Programms. Im vorangegangenen Beispiel ist der Wert der Variablen date gleich Null. Wenn Sie diese Variable in einem Funktionsaufruf DTW_ASSIGN verwenden, um ihren Wert einer anderen Variablen zuzuordnen, ist der Wert der neuen Variablen nach der Zuordnung ebenfalls Null. Der einzige Zweck einer ausführbaren Variablen besteht darin, das Programm aufzurufen, das sie definiert.

Außerdem können Sie Parameter an das auszuführende Programm übergeben, indem Sie sie bei der Variablendefinition mit dem Programmnamen angeben. Im folgenden Beispiel werden die Werte für distance und time an das Programm calcMPH übergeben.

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

Im nächsten Beispiel wird das Systemdatum als Teil des HTML-Berichts zurückgegeben:

%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()
%}

Jeder Bericht zeigt zur besseren Übersicht das Datum an. In diesem Beispiel werden außerdem die Kundennummer (CUSTNO) und der Kundenname (CUSTNAME) in eine Verbindung (Link) für ein anderes Net.Data-Makro eingefügt. Durch Anklicken eines Kunden im Bericht wird das Net.Data-Makro exmp.d2w aufgerufen, und die Nummer und der Name des Kunden werden an das Net.Data-Makro übergeben.

Verdeckte Variablen

Sie können verdeckte Variablen verwenden, um den tatsächlichen Namen einer Variablen für Anwendungsbenutzer unsichtbar zu machen, die Ihre HTML-Quelle mit ihrem Web-Browser anzeigen. Eine verdeckte Variable wird wie folgt definiert:

  1. Definieren Sie eine Variable für jede Zeichenfolge, die Sie verdecken wollen, nach dem letzten Verweis auf die jeweilige Variable im HTML-Block. Variablen werden immer mit Hilfe des Sprachkonstrukts DEFINE definiert, nachdem sie im HTML-Block verwendet wurden, wie in folgendem Beispiel. Auf die Variablen $$(variable) wird verwiesen, anschließend werden sie definiert.

  2. Verwenden Sie in dem HTML-Block, in dem auf die Variablen verwiesen wird, für einen Variablenverweis zwei Dollarzeichen anstelle eines einzelnen Dollarzeichens. Zum Beispiel $$(X) anstelle von $(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
    %}
    
    .
    .
    .
    

    Wenn ein Web-Browser das HTML-Formular anzeigt, werden $$(name) und $$(addr) durch $(name) bzw. $(addr) ersetzt, so daß die tatsächlichen Namen für Tabelle und Spalten im HTML-Formular nirgendwo vorkommen. Anwendungsbenutzer können nicht erkennen, daß die tatsächlichen Variablennamen verdeckt sind. Wenn der Benutzer das Formular übergibt, wird der Block HTML(REPORT) aufgerufen. Wenn @mySelect() den FUNCTION-Block aufruft, wird $(Field) in der SQL-Anweisung durch customer.name bzw. customer.addr in der SQL-Abfrage ersetzt.

Listenvariablen

Mit Listenvariablen können Sie eine begrenzte Wertefolge erstellen. Diese Variablenart ist besonders hilfreich beim Erstellen einer SQL-Abfrage mit mehreren Elementen, die in einigen Klauseln WHERE oder HAVING auftreten. Die Syntax für eine Listenvariable sieht wie folgt aus:

%LIST " value_separator " variable_name

Empfehlung: Leerzeichen sind signifikante Zeichen. Fügen Sie in den meisten Fällen ein Leerzeichen vor und nach dem Wertetrennzeichen ein. Die meisten Abfragen verwenden boolesche oder mathematische Operatoren (z. B. AND, OR oder >) als Wertetrennzeichen. Das folgende Beispiel zeigt die Verwendung von Bedingungsvariablen, verdeckten Variablen und Listenvariablen:

%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 Paola<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()
%}

Wenn im HTML-Formular keine Kästchen ausgewählt werden, ist conditions gleich Null, so daß whereClause in der Abfrage ebenfalls Null ist. Andernfalls hat whereClause die durch OR getrennten Werte, die ausgewählt wurden. Wenn beispielsweise alle drei Städte ausgewählt werden, lautet die SQL-Abfrage:

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

Im folgenden wird Seattle ausgewählt, so daß die SQL-Abfrage wie folgt aussieht:

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

Tabellenvariablen

Die Tabellenvariable definiert eine Sammlung zusammengehöriger Daten. Sie enthält eine Feldgruppe identischer Datensätze oder Zeilen sowie eine Feldgruppe von Spaltennamen, die die Felder in jeder Zeile beschreiben. Eine Tabelle wird in einem Net.Data-Makro wie in der folgenden Anweisung definiert:

%DEFINE myTable=%TABLE(30)

Die Zahl hinter TABLE gibt die maximale Anzahl der Zeilen an, die diese Tabelle enthalten kann. Wenn Sie eine Tabelle ohne Zeilenbegrenzung angeben wollen, müssen Sie den Standardwert bzw. ALL angeben:

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

Bei der Definition einer Tabelle hat die Tabelle null Zeilen und null Spalten, und es wird kein Speicher zugeordnet. Die einzige Möglichkeit, eine Tabelle mit Werten zu füllen, besteht darin, sie als Parameter OUT oder INOUT an eine Funktion zu übergeben. Die Sprachumgebung DTW_SQL fügt die Ergebnisse einer Anweisung SELECT automatisch in eine Tabelle ein.

Bei allen anderen Sprachumgebungen, wie zum Beispiel DTW_REXX oder DTW_PERL, werden Tabellenwerte nicht automatisch gesetzt. Statt dessen werden die einzelnen Elemente der Tabelle für den systemeigenen Sprach-Interpreter als Ausgabeparameter zur Verfügung gestellt und müssen dann durch die Prozedur bzw. das Programm, das ausgeführt wird, gesetzt werden. Einzelheiten hierzu finden Sie in den Beschreibungen der Sprachumgebungen im Handbuch Language Environment Reference.

Sie können eine Tabelle zwischen Funktionen übergeben, indem Sie auf den Namen der Tabellenvariablen verweisen. Auf die einzelnen Elemente der Tabelle kann in einem REPORT-Block einer Funktion verwiesen werden. Nähere Informationen hierzu finden Sie unter Variablen zur Tabellenverarbeitung. Tabellenvariablen werden in der Regel in einer SQL-Funktion mit Werten gefüllt und anschließend als Eingabe für einen Bericht entweder in der SQL-Funktion oder in einer anderen Funktion verwendet, nachdem sie als Parameter an diese Funktion übergeben wurden. Sie können Tabellenvariablen an eine beliebige Nicht-SQL-Funktion als Parameter IN, OUT oder INOUT übergeben. Tabellen können nur als Parameter OUT an SQL-Funktionen übergeben werden.

Die Spaltennamen und Feldwerte in einer Tabelle werden als Feldgruppenelemente mit dem Ursprung 1 und nicht wie der Standardkonvention der Sprachen C und C++ entsprechend mit dem Ursprung 0 für den Anfang von Feldgruppen angegeben.

Zusätzliche Variablen

Dies sind durch Net.Data definierte Variablen, die zu folgenden Zwecken verwendet werden können:

Zusätzliche Variablen können entweder einen von Net.Data bestimmten vordefinierten Wert oder von Ihnen festgelegte Werte besitzen. Zum Beispiel bestimmt Net.Data den Wert der Variablen DTW_CURRENT_FILENAME nach der aktuellen Datei, die momentan verarbeitet wird, während Sie festlegen können, ob Net.Data zusätzliche, durch Tabulatoren und Zeilenvorschubzeichen verursachte Leerzeichen entfernen soll.

Vordefinierte Variablen werden innerhalb der Makrodatei als Variablenverweise verwendet und liefern Informationen über den aktuellen Status von Dateien, Datumsangaben oder den Status eines Funktionsaufrufs. Um beispielsweise den Namen der aktuellen Datei abzurufen, könnten Sie folgende Variable verwenden:

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

Änderbare Variablenwerte werden gewöhnlich mit Hilfe einer Anweisung DEFINE oder der Funktion @DTW_ASSIGN() festgelegt und geben Ihnen die Möglichkeit, die Verarbeitung der Makrodatei durch Net.Data zu beeinflussen. Mit der folgenden Anweisung DEFINE könnten Sie zum Beispiel angeben, daß zusätzliche Leerzeichen (White Space) entfernt werden sollen:

%DEFINE DTW_REMOVE_WS="YES"

Eine Liste verschiedener gültiger Variablen mit Syntax und Beispielen finden Sie im Kapitel über Variablen im Handbuch Net.Data Reference.

Variablen zur Tabellenverarbeitung

Net.Data definiert Variablen zur Tabellenverarbeitung, die in REPORT- und ROW-Blöcken verwendet werden können. Diese Variablen dienen zum Verweisen auf Werte aus SQL-Abfragen und Funktionsaufrufen.

Die Variablen zur Tabellenverarbeitung besitzen einen vordefinierten Wert, der von Net.Data festgelegt wird, und ermöglichen Ihnen, auf Werte aus den Ergebnismengen von SQL-Abfragen oder Funktionsaufrufen nach Spalte, Zeile oder Feld, die bzw. das verarbeitet wird, zu verweisen. Sie können außerdem auf Informationen zur Anzahl der verarbeiteten Zeilen oder auf eine Liste aller Spaltennamen zugreifen.

Bei der Verarbeitung der Ergebnismenge aus einer SQL-Abfrage ordnet Net.Data zum Beispiel den Wert der Variablen Nn für jeden aktuellen Spaltennamen zu, so daß N1 der ersten Spalte, N2 der zweiten Spalte usw. zugeordnet wird. Sie können für Ihre HTML-Ausgabe auf den aktuellen Spaltennamen verweisen.

Variablen zur Tabellenverarbeitung werden als Variablenverweise innerhalb der Makrodatei verwendet. Zum Beispiel können Sie den Namen der aktuellen Spalte, die verarbeitet wird, folgendermaßen abrufen:

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

Variablen zur Tabellenverarbeitung liefern außerdem Informationen zu den Ergebnissen einer Abfrage. Sie können im Makro auf die Variable TOTAL_ROWS verweisen, um die Anzahl der von einer SQL-Abfrage zurückgegebenen Zeilen abzufragen, wie im folgenden Beispiel gezeigt:

Names found: $(TOTAL_ROWS)

Einige der Variablen zur Tabellenverarbeitung werden von anderen Variablen oder integrierten Funktionen beeinflußt. Zum Beispiel setzt die Variable TOTAL_ROWS voraus, daß die SQL-Sprachumgebungsvariable DTW_SET_TOTAL_ROWS aktiviert ist, so daß Net.Data den Wert von TOTAL_ROWS zuordnet, wenn die Ergebnisse aus einer SQL-Abfrage oder einem Funktionsaufruf verarbeitet werden, wie in folgendem Beispiel gezeigt wird:

%DEFINE DTW_SET_TOTAL_ROWS="YES"
...

Names found: $(TOTAL_ROWS)

Eine Liste gültiger Variablen zur Tabellenverarbeitung mit Syntax und Beispielen finden Sie im Kapitel über Variablen im Handbuch Net.Data Reference.

Berichtsvariablen

Net.Data zeigt HTML-Ausgaben, die durch die Makrodatei generiert werden, in einem Standardberichtsformat an. Das Standardberichtsformat wird in einem Tabellenformat mit Hilfe von <PRE> </PRE> angezeigt. Sie können den Standardbericht außer Kraft setzen, indem Sie einen REPORT-Block mit Anweisungen zum Anzeigen der Ausgabe definieren oder eine der Berichtsvariablen verwenden, um die Generierung des Standardberichts zu verhindern.

Berichtsvariablen unterstützen Sie bei der Anpassung der Anzeige der HTML-Ausgabe und bei der Verwendung der HTML-Ausgabe mit Standardberichten und Net.Data-Tabellen. Diese Variablen müssen vor ihrer Verwendung mit Hilfe einer Anweisung DEFINE oder der Funktion @DTW_ASSIGN() definiert werden.

Die Berichtsvariablen definieren die Verwendung von Leerzeichen, überschreiben Standardberichtsformate, legen HTML-Tabellenausgaben oder Standardtabellenausgaben fest und bestimmen weitere Anzeigemerkmale. Zum Beispiel können Sie mit der Variable ALIGN die Verwendung führender und nachgestellter Leerzeichen für die Variablen zur Tabellenverarbeitung steuern. Im folgenden Beispiel wird die Variable ALIGN verwendet, um jeden Spaltennamen in einer Liste, die durch eine Abfrage zurückgegeben wird, durch Leerzeichen zu trennen.

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

Mit der Berichtsvariablen START_ROW_NUM können Sie festlegen, ab welcher Zeile die Ergebnisse einer Abfrage angezeigt werden sollen. Zum Beispiel gibt der folgende Variablenwert an, daß Net.Data die Ergebnisse einer Abfrage ab der dritten Zeile anzeigen soll:

%DEFINE START_ROW_NUM = "3"

Sie können außerdem festlegen, ob Net.Data HTML-Befehle für die Standardformatierung verwenden soll. Wenn der Wert der Variablen DTW_HTML_TABLE auf YES gesetzt ist, wird keine Tabelle mit formatiertem Text erstellt, sondern eine HTML-Tabelle.

%DEFINE DTW_HTML_TABLE="YES"

%FUNCTION(DTW_SQL){
SELECT NAME, ADDRESS FROM $(qTable)
%}

Eine Liste gültiger Berichtsvariablen mit Syntax und Beispielen finden Sie im Kapitel über Variablen im Handbuch Net.Data Reference.

Sprachumgebungsvariablen

Diese Variablen werden mit Sprachumgebungen verwendet und beeinflussen die Verarbeitung einer Anforderung durch die Sprachumgebung. Diese Variablen müssen vor ihrer Verwendung in einem Variablenverweis mit Hilfe einer Anweisung DEFINE oder der Funktion @DTW_ASSIGN() definiert werden. Setzen Sie Sprachumgebungsvariablen, oder verweisen Sie auf sie in den entsprechenden Net.Data-Makroblöcken.

Mit diesen Variablen können Sie Operationen durchführen wie das Herstellen von Verbindungen zu Datenbanken, das Bereitstellen alternativen Texts für Java-Applets und das Aktivieren der Sprachenunterstützung.

Zum Beispiel können Sie mit der Variablen SQL_STATE auf den von der Datenbank zurückgegebenen SQLSTATE-Wert zugreifen bzw. diesen Wert anzeigen.

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

Das folgende Beispiel zeigt, wie die Datenbank definiert wird, auf die zugegriffen werden soll.

%DEFINE DATABASE="CELDIAL"

Eine Liste gültiger Sprachumgebungsvariablen mit Syntax und Beispielen finden Sie im Kapitel über Variablen im Handbuch Net.Data Reference.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]