Anfang des Inhaltsbereichs

Ereignisblöcke mit CHECK verlassen Dokument im Navigationsbaum lokalisieren

Wenn die Anweisung CHECK <expr> innerhalb eines Ereignisblocks aber außerhalb einer Schleife programmiert ist und die Bedingung <expr> ist nicht erfüllt, wird die Verarbeitung dieses Verarbeitungsblocks sofort beendet.

Für <expr> kann ein beliebiger logischer Ausdruck verwendet werden oder der Name einer Selektionstabelle. Entspricht bei Angabe einer Selektionstabelle der Inhalt des entsprechenden Tabellenarbeitsbereichs nicht der Bedingung in der Selektionstabelle, wirkt dies wie ein unwahrer logischer Ausdruck.

Die ABAP-Laufzeitumgebung das nächste Ereignis gemäß der folgenden Abbildung aus:

Diese Grafik wird im zugehörigen Text erklärt

Bei allen Ereignissen wird immer das nächste Ereignis der vorgegebenen Reihenfolge aufgerufen.

Falls CHECK innerhalb einer DO, WHILE, oder LOOP-Schleife steht, wird die Schleife beendet und nicht der Ereignisblock.

Innerhalb von GET-Ereignisblöcken bedeuted das nächste Ereignis der vorgegebenen Reihenfolge das nächste GET-Ereignis der gleichen hierarchischen Ebene. Die logische Datenbank liest nach dem Verlassen des Ereignisblocks die nächste Zeile des aktuellen Knotens oder des nächsthöheren Knotens, falls das Ende der Hierarchiestufe erreicht ist. Knoten, die in der hierarchischen Struktur der logischen Datenbank untergeordnet sind, werden nicht verarbeitet.

In GET-Ereignisblöcken gibt es eine weitere Variante der CHECK-Anweisung:

CHECK SELECT-OPTIONS.

Diese Anweisung prüft den Inhalt des Tabellenarbeitsbereichs des aktuellen Knotens gegen alle Selektionstabellen, die mit dem Knoten verknüpft sind.

Es ist zu beachten, daß die Verwendung von CHECK-Anweisungen zum Prüfen von Datenbankinhalten während GET-Ereignissen erst nach dem Lesen der Daten durch die logische Datenbank stattfindet. Aus Performancegründen sollte deshalb soweit wie möglich auf diese Art der Prüfung verzichtet werden. Stattdessen sollten die Prüfungen vor dem Lesen, z.B. durch freie Abgrenzungen, vorgenommen werden.

Beispiel

Der folgende Report ist mit der logischen Datenbank F1S verknüpft:

REPORT demo_program_check_1.

NODES: spfli, sflight, sbook.

START-OF-SELECTION.
  LOOP AT airp_fr.
    CHECK airp_fr-low NE ' '.
    WRITE: / 'Selected Aiport-From:', airp_fr-low.
    ULINE.
  ENDLOOP.
  LOOP AT airp_fr.
    CHECK airp_to-low NE ' '.
    WRITE: / 'Selected Airport-To:', airp_to-low.
    ULINE.
  ENDLOOP.

GET sflight.
  WRITE: / 'Connid:', sflight-connid,
           'Carrid:', sflight-carrid,
           'Fldate:', sflight-fldate.

Falls der Benutzer für CITY_FR Frankfurt eingibt, aber nichts für CITY_TO, sieht erste Teil der Liste so aus:

Diese Grafik wird im zugehörigen Text erklärt

Nach der zweiten CHECK-Anweisung wird der Ereignisblock START-OF-SELECTION verlassen und das Ereignis GET SFLIGHT ausgelöst.

Beispiel

Der folgende Report ist mit der logischen Datenbank F1S verknüpft:

REPORT demo_program_check_2.

NODES: spfli, sflight, sbook.

GET sflight.
  CHECK sflight-carrid EQ 'LH'.
  WRITE: / 'Connid:', sflight-connid,
           'Carrid:', sflight-carrid,
           'Fldate:', sflight-fldate.

GET sbook.
  CHECK sbook-bookid LT 00000320.
  WRITE: / 'Bookid:', sbook-bookid.

GET sflight LATE.
  ULINE.

Die Ausgabeliste sieht etwa so aus:

Diese Grafik wird im zugehörigen Text erklärt

In diesem Beispiel müssen alle Zeilen des Knoten SFLIGHT und, falls SFLIGHT-CARRID gleich "LH" ist, alle Zeilen des Knotens SBOOK gelesen werden. Aus Performance-Gründen sollten keine Selektionen wie in diesem Beispiel programmiert werden, sondern verwenden die Selektionen der logischen Datenbank verwendet werden.

 

 

Ende des Inhaltsbereichs