Anfang des InhaltsbereichsBedingte Verzweigungen Dokument im Navigationsbaum lokalisieren

Bedingte Verzweigungen führen Anweisungsblöcke in Abhängigkeit vom Ergebnis eines oder mehrerer logischer Ausdrücke aus. ABAP enthält zwei Kontrollstrukturen für bedingte Verzweigungen.

Die IF-Kontrollstruktur

Die IF-Kontrollstruktur wird durch die IF-Anweisung eingeleitet. Diese Anweisung verzweigt den Programmablauf, in Abhängigkeit von einer Bedingung, an einen Anweisungsblock. Der Anweisungsblock wird durch die IF-Anweisung begonnen und durch eine ENDIF-Anweisung oder eine optionale ELSEIF- oder ELSE-Anweisung beendet.

IF <bedingung1>.
  <anweisungsblock>
ELSEIF <bedingung2>
  <anweisungsblock>.
ELSEIF <bedingung3>.
  <anweisungsblock>
.....
ELSE.
  <anweisungsblock>
ENDIF.

Für die Bedingungen in den IF- und ELSEIF-Anweisungen können beliebige logische Logische Ausdrücke verwendet werden.

Wenn die erste Bedingung erfüllt ist, werden alle Anweisungen bis zum Ende des ersten Anweisungsblocks abgearbeitet und der Programmablauf nach der ENDIF-Anweisung wieder aufgenommen. Ist die erste Bedingung nicht erfüllt, wird zur nächste ELSEIF-Anweisung verzweigt und diese wie eine IF-Anweisung ausgeführt. Mit ELSE beginnt ein Anweisungsblock, der abgearbeitet wird, wenn keine der IF- oder ELSEIF-Bedingungen erfüllt ist. Das Ende des letzten Anweisungsblocks muß mit ENDIF gekennzeichnet werden.

IF-Kontrollstrukturen können geschachtelt werden. Die Anweisungsblöcke müssen jedoch innerhalb des aktuellen Verarbeitungsblock beendet werden. Das bedeutet, daß ein IF - ENDIF-Block beispielsweise kein Ereignisschlüsselwort enthalten darf.

Beispiel

REPORT demo_flow_control_if .

DATA: text1(30) TYPE c VALUE 'This is the first text',
      text2(30) TYPE c VALUE 'This is the second text',
      text3(30) TYPE c VALUE 'This is the third text',
      string(5) TYPE c VALUE 'eco'.

IF text1 CS string.
  WRITE / 'Condition 1 is fulfilled'.
ELSEIF text2 CS string.
  WRITE / 'Condition 2 is fulfilled'.
ELSEIF text3 CS string.
  WRITE / 'Condition 3 is fulfilled'.
ELSE.
  WRITE / 'No condition is fulfilled'.
ENDIF.

Die Listenausgabe ist:

Condition 2 is fulfilled.

In diesem Beispiel ist der zweite logische Ausdruck TEXT2 CS STRING wahr, weil der String 'eco' in TEXT2 enthalten ist.

Die CASE-Kontrollstruktur

Die CASE-Kontrollstruktur wird durch die CASE-Anweisung eingeleitet. Die CASE-Kontrollsstruktur erlaubt die Verzweigung zu verschiedenen Anweisungblöcken in Abhängigkeit vom Inhalt eines Datenobjekts:

CASE <f>.
  WHEN <f11> [OR <f 12> OR ...].
       <anweisungsblock>
  WHEN <f21>.[OR <f 22> OR ...]
       <anweisungsblock>
  WHEN <f31> [OR <f 32> OR ...].
       <anweisungsblock>
  WHEN ...
  ......
  WHEN OTHERS.
       <anweisungsblock>
ENDCASE.

Der Anweisungsblock nach einer WHEN-Anweisung wird ausgeführt, wenn der Inhalt von <f> gleich dem Inhalt von einem der Felder <f ij > ist. Danach wird derProgrammablauf hinter ENDCASE wieder aufgenommen. Der Anweisungsblock nach der optionalen Anweisung WHEN OTHERS wird durchgeührt, wenn der Inhalt von <f> mit dem Inhalt von keinem der Felder <f ij > übereinstimmt. Der letze Anweisungsblock der Kontrollstruktur muß mit ENDCASE abgeschlossen werden.

Die CASE-Kontrollstruktur ist die Kurzform folgender IF-Kontrollstruktur:

IF <f> = <f11> OR <f> = <f 12> OR <f> = ...
  <anweisungsblock>
ELSEIF <f> = <f21> OR <f> = <f 22> OR <f> =...
  <anweisungsblock>
ELSEIF <f> = <f31> OR <f> = <f 32> OR <f> =...
  <anweisungsblock>
ELSEIF <f> = ...
  ...
ELSE.
  <anweisungsblock>
ENDIF.

CASE-Kontrollstrukturen können geschachtelt und mit IF-Kontrollstrukturen kombiniert werden. Sie müssen jedoch innerhalb des aktuellen Verarbeitungsblocks durch ENDCASE beendet werden.

Beispiel

REPORT demo_flow_control_case .

DATA: text1   TYPE c VALUE 'X',
      text2   TYPE c VALUE 'Y',
      text3   TYPE c VALUE 'Z',
      string  TYPE c VALUE 'A'.

CASE string.
  WHEN text1 OR text2.
    WRITE: / 'String is', text1, 'OR', text2.
  WHEN text3.
    WRITE: / 'String is', text3.
  WHEN OTHERS.
    WRITE: / 'String is not', text1, text2, text3.
ENDCASE.

Die Listenausgabe ist:

String is not X Y Z

In diesem Beispiel wird der letzte Anweisungsblock nach WHEN OTHERS verarbeitet, weil der Inhalt von STRING , 'A', nicht mit 'X', 'Y' oder 'Z' übereinstimmt.

Ende des Inhaltsbereichs