Bedingte Verzweigungen 

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.

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.

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.