Net.Data Verwaltung und Programmierung für OS/400


Beispiel für ein permanentes Makro

Das folgende einfache Makro enthält mehrere HTML-Blöcke, die in einer einzigen Transaktion ausgeführt werden:

@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">
click here to continue</a><br>
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/quit">
click here to quit</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">
Click here to continue</a><br>
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/quit">
Click here to quit</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">
Click here to quit</a><br>
%}

%html(quit) {
@dtw_terminate()
a = $(a)<br>
b = $(b)<br>
done
%}

Angenommen, der erste Aufruf bezieht sich auf den HTML-Block report. In diesem Fall führt Net.Data folgende Schritte aus:

  1. Die Funktion DTW_STATIC() wird aufgerufen. Sie gibt an, daß dieses Makro permanent ist.

  2. Die Variable a wird als STATIC-Variable erstellt, weil die Standardeinstellung für permanente Makros STATIC ist.

  3. Die Variable b wird als TRANSIENT-Variable erstellt, weil sie explizit mit dem Attribut TRANSIENT definiert ist.

  4. Es wird DTW_RTVHANDLE() aufgerufen, wodurch eine Transaktionskennung generiert und in die Variable handle gestellt wird.

  5. Es wird mit der Verarbeitung des HTML-Blocks report begonnen und DTW_ACCEPT() aufgerufen, wodurch Net.Data darüber informiert wird, daß die Transaktionskennung für diese Transaktion gilt.

  6. Es werden Ausgaben an den Browser gefunden, was dazu führt, daß Net.Data die HTTP-Kopfdaten an den Web-Server sendet, um anzugeben, daß eine Transaktion beginnt.

  7. Die HTML-Seite wird angezeigt. Die Variablen a und b haben beiden den Wert 0.

Nachdem die erste Ausgabeseite an den Browser gesendet wurde, können die Benutzer die Transaktion entweder fortsetzen oder beenden. Wenn sie fortgesetzt wird, ruft der Web-Server folgende URL-Adresse auf:

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

Der Web-Server erkennt die Transaktionskennung als die Kennung, die von Net.Data in den HTTP-Kopfdaten angegeben wurde. Er ruft Net.Data als permanentes CGI-Programm auf, was bedeutet, daß der Makroaufruf Teil der aktuellen Transaktion ist.

Wenn der HTML-Block report2 aufgerufen wird, führt Net.Data folgende Schritte aus:

  1. Die Funktion DTW_STATIC() wird aufgerufen. Sie gibt an, daß dieses Makro permanent ist.

  2. Es wird erkannt, daß Variable a eine STATIC-Variable ist, und der aktuelle Wert wird beibehalten, statt die Variable mit 0 erneut zu initialisieren.

  3. Es wird erkannt, daß Variable b eine TRANSIENT-Variable ist, und es wird ein neues Exemplar der Variablen erstellt, das mit 0 initialisiert wird.

  4. Es wird DTW_RTVHANDLE() aufgerufen, wodurch eine Transaktionskennung generiert und in die Variable handle gestellt wird.

  5. Es wird mit der Verarbeitung des HTML-Blocks report2 begonnen und DTW_ACCEPT() aufgerufen, wodurch Net.Data darüber informiert wird, daß die Transaktionskennung für diese Transaktion gilt.

  6. Es werden Ausgaben an den Browser gefunden, was dazu führt, daß Net.Data die HTTP-Kopfdaten an den Server sendet, um anzugeben, daß eine Transaktion fortgeführt wird.

  7. Die HTML-Seite wird angezeigt. Variable a hat den Wert 2 und Variable b den Wert 0. Der Wert der Variablen a stammt aus dem vorherigen Aufruf, weil es sich um eine statische Variable handelt. Der Wert der Variablen b wird auf 0 zurückgesetzt.

Nachdem die zweite Seite an den Browser gesendet wurde, können die Benutzer die Transaktion entweder fortsetzen oder beenden. Wenn sie beendet wird, ruft der Web-Server folgende URL-Adresse auf:

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

Der Web-Server erkennt die Transaktionskennung als die Kennung, die von Net.Data in den HTTP-Kopfdaten angegeben wurde, und ruft Net.Data als permanentes CGI-Programm auf, was bedeutet, daß der Makroaufruf Teil der aktuellen Transaktion ist.

Wenn der HTML-Block quit aufgerufen wird, führt Net.Data folgende Schritte aus:

  1. Die Funktion DTW_STATIC() wird aufgerufen. Sie gibt an, daß dieses Makro permanent ist.

  2. Es wird erkannt, daß Variable a eine STATIC-Variable ist, und der aktuelle Wert wird beibehalten, statt die Variable mit 0 erneut zu initialisieren.

  3. Es wird erkannt, daß Variable b eine TRANSIENT-Variable ist, und es wird ein neues Exemplar der Variablen erstellt, das mit 0 initialisiert wird.

  4. Es wird DTW_RTVHANDLE() aufgerufen, wodurch eine Transaktionskennung generiert und in die Variable handle gestellt wird.

  5. Es wird mit der Verarbeitung des HTML-Blocks quit begonnen und DTW_TERMINATE() aufgerufen, wodurch Net.Data darüber informiert wird, daß dies der letzte Aufruf in dieser Transaktion ist.

  6. Es werden Ausgaben an den Browser gefunden, was dazu führt, daß Net.Data die HTTP-Kopfdaten an den Server sendet, um anzugeben, daß eine Transaktion beendet wird.

  7. Die HTML-Seite wird angezeigt. Variable a hat den Wert 4 und Variable b den Wert 0.

  8. Es werden alle Variablen und andere Ressourcen mit dem Gültigkeitsbereich einer Transaktion gelöscht, weil der Aufruf von DTW_TERMINATE() ausgeführt wurde.


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