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

Bedingte Logik

Mit Hilfe des IF-Blocks können Sie in einem Net.Data-Makro eine bedingte Verarbeitung durchführen. Der IF-Block ist den IF-Anweisungen der meisten höheren Sprachen ähnlich, weil er die Möglichkeit bietet, eine oder mehrere Bedingungen zu testen und anschließend auf der Grundlage des Ergebnisses des Bedingungstests einen Block von Anweisungen auszuführen.

Sie können IF-Blöcke fast überall in einem Makro verwenden und sie verschachteln. Die Syntax eines IF-Blocks wird im Kapitel über die Sprachkonstrukte im Handbuch Net.Data Reference dargestellt.

Die Syntaxregeln für einen IF-Block werden durch die Position des Blocks in der Makrodatei bestimmt. Die Elemente, die im Block der ausführbaren Anweisungen eines IF-Blocks zulässig sind, hängen von der Position des IF-Blocks selbst ab. Jedes Element, das innerhalb des Blocks, in dem sich der IF-Block befindet, gültig ist, ist auch innerhalb dieses IF-Blocks gültig. Wenn Sie zum Beispiel einen IF-Block innerhalb eines HTML-Blocks angeben, ist jedes Element, daß in dem HTML-Block zulässig ist, auch in diesem IF-Block zulässig, wie zum Beispiel INCLUDE-Anweisungen und WHILE-Blöcke.

%HTML block
...
  %IF block
...
    %INCLUDE
...
    %WHILE

Wenn Sie den IF-Block außerhalb jedes anderen Blocks im Deklarationsabschnitt des Net.Data-Makros angeben, sind analog nur solche Elemente in dem IF-Block zulässig, die außerhalb jedes anderen Blocks zulässig sind (wie zum Beispiel ein DEFINE-Block oder ein FUNCTION-Block).

%IF
...
  %DEFINE
...
  %FUNCTION

Wenn ein IF-Block in einem IF-Block verschachtelt ist, der sich außerhalb jedes anderen Blocks im Deklarationsabschnitt befindet, können in diesem Block alle Elemente verwendet werden, die im außerhalb liegenden Block verwendet werden können. Wenn ein IF-Block in einem anderen Block verschachtelt ist, der sich in einem IF-Block befindet, übernimmt er die Syntaxregeln des Blocks, in dem er sich befindet.

Im folgenden Beispiel muß der verschachtelte IF-Block den Regeln folgen, die innerhalb eines HTML-Blocks gelten.

%IF
...
  %HTML block
...
     %IF block

Ausnahme: Geben Sie keinen ROW-Block in einem IF-Block an, wenn sich der IF-Block in einem REPORT-Block befindet.

Net.Data verarbeitet die Bedingungsliste des IF-Blocks auf eine von zwei Arten, je nach dem Inhalt der Ausdrücke, aus denen die Bedingungen bestehen. Die Standardaktion besteht darin, alle Ausdrücke als Zeichenfolgen zu behandeln und Zeichenfolgenvergleiche wie in den Bedingungen angegeben durchzuführen. Wenn jedoch die beiden folgenden Bedingungen zutreffen, führt Net.Data einen numerischen Vergleich durch:

Net.Data wertet den IF-Block zum Zeitpunkt der Ausführung des Blocks aus, der sich von dem Zeitpunkt, zu dem er ursprünglich von Net.Data gelesen wird, unterscheiden kann. Wenn Sie zum Beispiel einen IF-Block in einem REPORT-Block angeben, wertet Net.Data die Bedingungsliste des IF-Blocks nicht aus, wenn Net.Data die FUNCTION-Blockdefinition liest, die den REPORT-Block enthält, sondern erst, wenn Net.Data die Funktion aufruft und sie ausführt. Dies gilt sowohl für den Abscnitt mit der Bedingungsliste des IF-Blocks als auch für den Block der auszuführenden Anweisungen.

Einschränkung: Net.Data unterstützt keinen numerischen Vergleich von nichtganzzahligen Zahlen.

Beispiel: Dieses Beispiel zeigt eine Makrodatei, die IF-Blöcke in anderen Blöcken enthält:

%{ This macro is called from another macro, passing the operating system
   and version variables in the form data.
%}

%IF (platform == "AS400")
  %IF (version == "V3R2")
     %INCLUDE "as400v3r2_def.hti"
  %ELIF (version == "V3R7")
     %INCLUDE "as400v3r7_def.hti"
  %ELIF (version == "V4R1")
     %INCLUDE "as400v4r1_def.hti"
%ENDIF
%ELSE
     %INCLUDE "default_def.hti"
%ENDIF

%MACRO_FUNCTION numericCompare(IN term1, term2, OUT result) {
%IF (term1 < term2)
  @dtw_assign(result, "-1")
%ELIF (term1 > term2)
  @dtw_assign(result, "1")
%ELSE
  @dtw_assign(result, "0")
%ENDIF
%}

%HTML(report){
  %WHILE (a < "10") {
    outer while loop #$(a)<BR>
    %IF (@dtw_rdivrem(a,"2") == "0")
      this is an even number loop<BR>
%ENDIF
    @DTW_ADD(a, "1", a)
  %}
%}


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