Show TOC Anfang des Inhaltsbereichs

Anhang: Die Steploop-Technik  Dokument im Navigationsbaum lokalisieren

Die Verarbeitung von Table Controls erfolgt über die sogenannte Steploop-Technik.

Steploops sind die Vorgänger von Table Controls. Sie sollten nicht mehr verwendet werden. Vorhandene Steploops lassen sich im Screen Painter in Table Controls umwandeln. Der Vollständigkeit halber und zur Erklärung der Technik der Datenübergabe zwischen Tabellen auf dem Bildschirm und dem ABAP-Programm werden Steploops und insbesondere die Steploop-Technik kurz beschrieben.

Wie Table Controls sind Steploops Bildschirmelemente für die Anzeige tabellenartiger Daten auf einem Bildschirmbild. In Bezug auf die Programmierung, insbesondere was die Datenübergabe angeht, sind Table Controls und Steploops fast identisch. Table Controls sind letztendlich eine Verbesserung von Steploops in Bezug auf die Benutzbarkeit durch den Endanwender.

Steploops definieren

Ein Steploop wird im Screen Painter definiert. Dabei werden Bildschirmelemente, die im Gegensatz zu Table Controls auch über mehrere Zeilen verteilt sein können, zu einer Gruppe zusammengefaßt, die sich innerhalb des Steploops mehrfach wiederholt. Die Attribute der Bildschirmelemente der ersten Gruppe bestimmen die Attribute des gesamten Steploops. Die Felder einer Gruppe erscheinen nur einmal in der Feldliste des entsprechenden Bilds. Im ABAP-Programm müssen sie also auch nur einmal angelegt werden. Ein Bildschirmbild kann mehr als einen Steploop enthalten. Steploops haben als Bildschirmelemente aber keine individuellen Namen.

Im Screen Painter kann festgelegt werden, ob die Größe eines Steploop fix oder variabel ist. Die vertikale Größe variabler Steploops ändert sich, wenn der Benutzer die vertikale Größe des Fensters ändert. Für jedes Bildschirmbild kann eine beliebige Zahl von fixen, aber nur ein variabler Steploop definiert werden. Bei jeder vertikalen Größenänderung wird PAI ausgelöst, falls ein variabler Steploop auf dem Bildschirm definiert ist. Bei fixen Steploops ist die Anzahl der Wiederholungsgruppen fest vorgegeben.

Steploops verarbeiten

Bei der Verarbeitung von Steploops (Steploop-Technik) werden Schleifen in der Dynproablauflogik ausgeführt. Die entsprechenden Befehle der Ablauflogik sind:

LOOP ...
  ...
ENDLOOP.

Diese Anweisungen dürfen nicht mit den gleichlautenden ABAP-Anweisungen verwechselt werden. Zwischen LOOP und ENDLOOP können die übrigen Schlüsselwörter FIELD, MODULE, SELECT, VALUES und CHAIN der Ablauflogik verwendet werden. Zumindest eine leere LOOP-Schleife muss für jeden Steploop sowohl PBO- als auch im PAI-Verarbeitungsblock vorhanden sein. Während der Schleifen werden die Inhalte des Steploop zwischen gleichnamigen Feldern des ABAP-Programms und des Dynpros hin und her transportiert. Dabei ist zu beachten, dass Steploop-Felder, die mit Dictionary-Bezug definiert sind, im ABAP-Programm wie gehabt mit TABLES als Schnittstellenarbeitsbereiche zu deklarieren sind.

Die Reihenfolge der Bearbeitung der Steploops in den einzelnen Schleifen der Ablauflogik richtet sich nach der Anordnung der Steploops auf dem Bildschirmbild. Die Reihenfolge auf dem Bildschirmbild richtet sich primär nach den Zeilen und sekundär nach den Spalten.

Die Anzahl der angezeigten Steploop-Zeilen kann sich ändern, wenn die Größe der angezeigten Tabelle variabel ist und der Benutzer die Fensterhöhe verändert. In diesem Fall können bei einzelnen  PAI-Ereignissen unterschiedliche Anzahlen von Zeilen an das ABAP-Programm übergeben werden.

Betreffs Ablauf des Datentransports und Cursorposition gilt das gleiche wie für Table Controls. Die Systemfelder sy-stepl und sy-loopc werden innerhalb der Schleifen ebenfalls versorgt.

Wir unterscheiden zwei prinzipielle Schleifen-Techniken:

Schleife über die Zeilen des Steploops

Die Befehle der Ablauflogik sind:

LOOP.
  ...
ENDLOOP.

Diese Anweisungen bewirken einen Schleifendurchlauf über die auf dem Bild angezeigten Steploop-Zeilen und übertragen bei PAI die Daten jeder Gruppe in die gleichnamigen Felder des ABAP-Programms bzw. umgekehrt bei PBO vom ABAP-Programm in die Steploop-Felder. In der LOOP-ENDLOOP-Schleife können Module aufgerufen werden, welche die übertragenen Daten verarbeiten und z.B. zu PBO aus einer internen Tabelle auslesen bzw. zu PAI in eine interne Tabelle stellen.

Bei dieser Form der Bearbeitung enthält die Anzeige von Steploops keine Blätterleisten. Falls geblättert werden soll, muss dies im ABAP-Programm programmiert werden.

Parallele Schleifen über Steploop und eine interne Tabelle

Die Befehle der Ablauflogik sind:

LOOP AT itab CURSOR c [INTO wa] [FROM n1] [TO n2].
  ...
ENDLOOP.

Diese Anweisung bewirkt einen parallelen Schleifendurchlauf über die auf dem Bild angezeigten Steploop-Zeilen und eine interne Tabelle itab des ABAP-Programms. Die Zusätze INTO, CURSOR und FROM sind nur zum Zeitpunkt PBO, aber nicht zu PAI möglich.

Bei dieser Form der Bearbeitung enthält die Anzeige von Steploops Blätterleisten. Die Blätterfunktion wird vom System automatisch eingerichtet, wobei die Steploop-Zeilen, zwischen denen geblättert werden kann, von der internen Tabelle im ABAP-Programm übernommen wird. Jedes Blättern löst das Ereignis PAI aus.

Mit dem Zusatz CURSOR wird zum Zeitpunkt PBO gesteuert, welche Zeile der internen Tabelle als erstes in der Bildanzeige erscheint. Dabei ist c ein Datenobjekt des ABAP-Programms vom Typ i. Umgekehrt wird c bei jedem PAI-Ereignis auf den Wert der ersten angezeigten Tabellenzeile gesetzt. Dadurch kann man die interne Tabelle des ABAP-Programms mit den angezeigten Steploop-Zeilen synchronisieren. Es empfiehlt sich, c zu Beginn von PAI in eine Hilfsvariable zu stellen und nicht in der Schleife auszuwerten, da sich der Wert von c beim Blättern ändert.

Mit dem Zusatz INTO werden zum Zeitpunkt PBO im die Felder der internen Tabelle itab in den Arbeitsbereich wa geschrieben und der Inhalt von wa Zeile für Zeile an die gleichnamigen Felder des Steploop auf dem Bildschirmbild transportiert. Ohne den Zusatz INTO muss eine interne Tabelle mit Kopfzeile verwendet werden. Dann wird bei PBO der Inhalt der Kopfzeile Zeile für Zeile an die gleichnamigen Felder des Steploop auf dem Bildschirmbild transportiert. Es ist also kein Modul zum Füllen der Steploop-Zeilen nötig.

Umgekehrt werden zum Zeitpunkt PAI die internen Tabellenzeilen nicht automatisch mit dem Inhalt der Steploop-Zeilen versorgt, sondern es muss ein Modul innerhalb der Schleife aufgerufen werden, das die Tabelle füllt. Der Zusatz AT itab muss aber trotzdem auch zu PAI angeben werden, da ansonsten das Blättern mit den Blätterleisten nicht funktioniert.

Mit dem Zusatz FROM und TO kann der Anzeige- bzw. Verarbeitungsbereich der internen Tabelle im Steploop eingeschränkt werden. Dabei sind n1 und n2 Datenobjekte des ABAP-Programms vom Typ i. Ohne Angabe dieser Parameter werden Anfang und/oder das Ende der internen Tabelle als Anzeige-/Verarbeitungsgrenze verwendet. Falls c außerhalb der Grenzen n1 und n2 liegt, haben letzere den Vorrang.

Die Zusätze CURSOR c und FROM n1 TO n2 der Anweisung LOOP AT, die bei Steploops die Anfangszeile und die Anzahl der angezeigten Zeilen der internen Tabelle bestimmen, sind bei Table Controls in der Ablauflogik zwar auch möglich, aber nicht notwendig. Bei TABLE CONTROLS erfolgt die Steuerung der Anzeige über die Struktur CXTAB_CONTROL im ABAP Programm.

·        Statt dem CURSOR c sollte bei Table Controls die Komponente TOP_LINE verwendet werden, die immer die oberste angezeigte Zeile enthält.

·        Falls n1 auch bei Table Controls angegeben wird, ändert sich die Berechnungsvorschrift für die Komponente CURRENT_LINE wie folgt: sy-stepl + (TOP_LINE -1) + (n1 - 1).

Beispiel

Beispiel

REPORT demo_dynpro_step_loop.

TYPES: BEGIN OF t_itab,
         col1 TYPE i,
         col2 TYPE i,
       END OF t_itab.

DATA: itab TYPE STANDARD TABLE OF t_itab,
      wa   LIKE LINE OF itab,
      fill TYPE i.

DATA: idx   TYPE i,
      line  TYPE i,
      step  TYPE i,
      limit TYPE i,
      c     TYPE i,
      n1    TYPE i VALUE 5,
      n2    TYPE i VALUE 25.

DATA:  ok_code TYPE sy-ucomm,
       save_ok TYPE sy-ucomm.

START-OF-SELECTION.

  DO 40 TIMES.
    wa-col1 = sy-index.
    wa-col2 = sy-index ** 2.
    APPEND wa TO itab.
  ENDDO.

  DESCRIBE TABLE itab LINES fill.

  CALL SCREEN 100.

MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_100' EXCLUDING 'PREVIOUS'.
ENDMODULE.

MODULE status_0200 OUTPUT.
  SET PF-STATUS 'STATUS_200' EXCLUDING 'NEXT'.
ENDMODULE.

MODULE transp_itab_out OUTPUT.
  idx = sy-stepl + line.
  READ TABLE itab INTO wa INDEX idx.
ENDMODULE.

MODULE transp_itab_in INPUT.
  step = sy-loopc.
  idx = sy-stepl + line.
  MODIFY itab FROM wa INDEX idx.
ENDMODULE.

MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'NEXT_LINE'.
      line = line + 1.
      limit = fill - step.
      IF line > limit.
        line = limit.
      ENDIF.
    WHEN 'PREV_LINE'.
      line = line - 1.
      IF line < 0.
        line = 0.
      ENDIF.
    WHEN 'NEXT_PAGE'.
      line = line + step.
      limit = fill - step.
      IF line > limit.
        line = limit.
      ENDIF.
    WHEN 'PREV_PAGE'.
      line = line - step.
      IF line < 0.
        line = 0.
      ENDIF.
    WHEN 'LAST_PAGE'.
      line =  fill - step.
    WHEN 'FIRST_PAGE'.
      line = 0.
    WHEN 'NEXT'.
      c = line + 1.
      LEAVE TO SCREEN 200.
  ENDCASE.
ENDMODULE.

MODULE get_first_line INPUT.
  line = c - 1.
ENDMODULE.

MODULE user_command_0200 INPUT.
  save_ok = ok_code.
  CASE save_ok.
    WHEN 'PREVIOUS'.
      LEAVE TO SCREEN 100.
  ENDCASE.
ENDMODULE.

MODULE cancel INPUT.
  
LEAVE PROGRAM.
ENDMODULE.

Das Layout von Dynpro 100 ist:

Diese Grafik wird im zugehörigen Text erklärt

Es ist ein variabler Steploop mit initial 10 Wiederholungsgruppen definiert. Die Felder der Wiederholungsgruppen sind die Komponenten col1 und col2 der Struktur wades ABAP-Programms.

Die Ablauflogik von Dynpro 100 ist:

PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  
LOOP.
    MODULE transp_itab_out.
  ENDLOOP.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  
LOOP.
    MODULE transp_itab_in.
  ENDLOOP.
  
MODULE user_command_0100.

Im Status STATUS_100 sind für Dynpro 100 die Funktionscodes FIRST_PAGE, PREV_PAGE, PREV_LINE, NEXT_LINE, NEXT_PAGE, LAST_PAGE und NEXT auf Drucktasten der Drucktastenleiste gelegt.

Das Layout von Dynpro 200 ist das gleiche wie von Dynpro 100, nur dass der Steploop hier nicht variabel, sondern fix ist.

Die Ablauflogik von Dynpro 200 ist:

PROCESS BEFORE OUTPUT.
  MODULE status_0200.
  LOOP AT itab INTO wa CURSOR c FROM n1 TO n2.
  ENDLOOP.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  MODULE get_first_line.
  LOOP AT itab.
    MODULE transp_itab_in.
  ENDLOOP.
  MODULE user_command_0200.

Im Status STATUS_200 ist für Dynpro 200 der Funktionscode PREVIOUS auf eine Drucktaste der Drucktastenleiste gelegt.

Bei Ausführung des Programms wird auf Dynpro 100 ein Steploop angezeigt, dessen Zeilenanzahl an die Höhe des Bildschirmbilds angepasst ist, der aber keine vertikalen Blätterleisten hat. Auf Dynpro 200 wird ein Steploop mit einer fixen Zeilenanzahl von 10 angezeigt, der eine vertikale Blätterleiste hat.

Zu PBO werden beide Steploops aus der internen Tabelle itab versorgt, wobei die Schleife bei Dynpro 100 nur über den Steploop und bei Dynpro 200 parallel über den Steploop und die interne Tabelle ausgeführt wird. Der Steploop auf Dynpro 200 ist auf die Zeilen 5 bis 25 der internen Tabelle eingeschränkt. Während bei Dynpro 100 ein PBO-Modul zum Füllen des Arbeitsbereichs WA aufgerufen wird, ist dies bei Dynpro 200 nicht notwendig.

Zu PAI wird in beiden Dynpros innerhalb der Schleifen ein Modul aufgerufen, in dem eventuelle Benutzereingaben in den Steploop-Zeilen in die entsprechenden Zeilen der internen Tabelle übernommen werden.

Für Dynpro 100 ist die Blätterfunktionalität des Steploops im PAI-Modul USER_COMMAND_100 programmiert. Dafür wird die Anzahl der Zeilen des Steploops auf dem Bildschirmbild in der Hilfsvariablen stepzwischengespeichert, da sy-loopc nur innerhalb der Schleife gefüllt ist. Für Dynpro 200 muss keine Blätterfunktionalität programmiert werden, da diese vom System automatisch durch die Blätterleiste zur Verfügung gestellt wird.

Die Synchronistation zwischen interner Tabelle und dem Steploop auf Dynpro 200 erfolgt über die Variable c, die im Zusatz CURSOR der LOOP-Anweisung verwendet wird. Sie wird vor dem Aufruf von Dynpro 200 entsprechend der Anzeige der Tabelle auf Dynpro 100 gesetzt, um die Steploops auf beiden Dynpros mit der gleichen Tabellenzeile zu beginnen. Zu PAI von Dynpro 200 wird causgelesen, um die erste Tabellenzeile nach einem eventuellen Blättern mit der Blätterleiste neu zu bestimmen.

Ende des Inhaltsbereichs