Dynpro: LOOP AT CURSOR WITH CONTROL

  1. PBO und PAI
LOOP WITH CONTROL contrl.
  ...

ENDLOOP.

Definition einer Schleife in der Dynpro-Ablauflogik, die mit einem Table Control contrl verknüpft ist. Die Schleife bearbeitet sequenziell die dargestellten Zeilen des Table Controls contrl, indem für jede Table-Control-Zeile ein Schleifendurchgang ausgeführt wird. Für contrl ist direkt der Name eines Table Controls des Dynpros anzugeben. Wenn der Table Control nicht vorhanden ist, wird die Schleife ignoriert. Der Anweisungsblock zwischen LOOP und ENDLOOP kann die Schlüsselwörter FIELD, MODULE, CHAIN und ENDCHAIN der Ablauflogik enthalten. Eine Schachtelung von Schleifen ist nicht möglich. Schleifen können entweder mit oder ohne Bezug zu einer internen Tabelle ausgeführt werden.

Wenn Table Controls in einem Dynpro definiert sind, muss für jeden Table Control sowohl im PBO-Verarbeitungsblock als auch im PAI-Verarbeitungsblock eine Schleife definiert werden.

Systemfelder

Innerhalb eines Schleifendurchgangs enthält das Systemfeld sy-stepl die Nummer der aktuellen Table-Control-Zeile, gezählt ab der obersten sichtbaren Zeile. Das Systemfeld sy-loopc enthält die Anzahl der auf dem Bildschirmbild dargestellten Table-Control-Zeilen.

2) Nur PAI

LOOP AT itab CURSOR cur [INTO wa]
     [CURSOR top_line] [FROM n1] [TO n2]

     WITH CONTROL contrl.
  ...
ENDLOOP.
 LOOP AT i_itab
          WITH CONTROL reihenfolge CURSOR reihenfolge-current_line.
 ENDLOOP.

Wenn der Zusatz AT itab angegeben ist, wird während der Schleifenverarbeitung des Table Controls parallel eine sequenzielle Verarbeitung der internen Tabelle itab des zugehörigen ABAP-Programms durchgeführt. Dabei wird für jede Zeile des Table Controls eine Zeile der internen Tabelle bearbeitet. Die interne Tabelle itab muss eine Indextabelle sein. Die Zusätze INTO, CURSOR, FROM, TO und WITH CONTROL dürfen nur zu PBO, nicht zu PAI angegeben werden. Zu PAI wird der Bezug zum Table Control über die interne Tabelle hergestellt.

Mit dem Zusatz INTO wird ein Arbeitsbereich wa angegeben, dem zum Zeitpunkt PBO am Ende jedes Schleifendurchgangs die aktuelle Zeile der internen Tabelle zugewiesen wird. Ist der Zusatz wa nicht angegeben, muss eine interne Tabelle mit Kopfzeile verwendet werden, die dann implizit statt wa verwendet wird. Der Inhalt von wa bzw. der Kopfzeile wird nach der Zuweisung an die gleichnamigen Felder in der aktuellen Zeile des Table Controls transportiert. Der Arbeitsbereich wa muss ein zum Zeilentyp der internen Tabelle passendes globales Datenobjekt des ABAP-Programms sein. Zum Zeitpunkt PAI wird dagegen nur der Arbeitsbereich wa bzw. die Kopfzeile der internen Tabelle zu Beginn jedes Schleifendurchgangs durch den Inhalt der Table-Control-Zeilen versorgt. Der Inhalt der internen Tabelle wird nicht automatisch modifiziert.

Die Syntax der Zusätze CURSOR, FROM und TO ist wie bei der Verarbeitung von Steploops. Diese Zusätze sind bei Schleifen über Table Controls zwar möglich, jedoch nicht notwendig, weil die Steuerung von Table Controls mit der über CONTROLS angelegten Struktur vom Typ CXTAB_CONTROL im ABAP-Programm erfolgen soll. Dabei entspricht top_line der Komponente TOP_LINE dieser Struktur, während die Anzahl der darzustellenden Zeilen statt über n1 und n2 über die Komponente LINES gesteuert werden kann. Falls n1 dennoch für Table Controls angegeben wird, wird der Inhalt der Komponente CURRENT_LINE abweichend von der bei CONTROLS gezeigten wie folgt berechnet: sy-stepl+ (TOP_LINE – 1) + (n1 – 1).

Mit dem Zusatz CURSOR wird gesteuert, bei welcher Zeile der internen Tabelle deren Verarbeitung zum Zeitpunkt PBO beginnt, d.h. der Inhalt welcher Zeile als Erstes im Steploop angezeigt wird. Für top_line muss ein globales Datenobjekt des ABAP-Programms vom Typ i angegeben werden. Wenn der Inhalt von top_line kleiner als 1 oder der Wert von n1 ist, wird er implizit auf 1 bzw. auf den Wert von n1 gesetzt. Wenn er größer als die Anzahl der Zeilen in der internen Tabelle oder als der Wert von n2 ist, wird der Steploop nicht angezeigt. Bei jedem PAI-Ereignis wird top_line auf den Index der ersten angezeigten Tabellenzeile gesetzt.