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.