SAP NetWeaver AS ABAP Release 750, ©Copyright 2016 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation → ABAP - Referenz → Obsolete Sprachelemente → Obsolete Benutzerdialoge → Obsolete Anweisungen der Dynpro-Ablauflogik → Obsolete Verarbeitung von Steploops →Steploop
Das Beispiel demonstriert die obsolete direkte Verwendung von Steploops.
Quelltext
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,
lines 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.
itab = VALUE #( FOR j = 1 UNTIL j > 40
( col1 = j col2 = j ** 2 ) ).
fill = lines( itab ).
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.
wa = itab[ idx ].
ENDMODULE.
MODULE transp_itab_in INPUT.
lines = 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 - lines.
IF line > limit.
line = limit.
ENDIF.
WHEN 'PREV_LINE'.
line = line - 1.
IF line < 0.
line = 0.
ENDIF.
WHEN 'NEXT_PAGE'.
line = line + lines.
limit = fill - lines.
IF line > limit.
line = limit.
ENDIF.
WHEN 'PREV_PAGE'.
line = line - lines.
IF line < 0.
line = 0.
ENDIF.
WHEN 'LAST_PAGE'.
line = fill - lines.
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.
Beschreibung
Im Layout von Dynpro 100 ist ein variabler Steploop mit initial 10 Wiederholungsgruppen definiert. Die Felder der Wiederholungsgruppen sind die Komponenten col1 und col2 der Struktur wa des ABAP-Programms.
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.
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 festen 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 step zwischengespeichert, 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 Synchronisation 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 c ausgelesen, um die erste Tabellenzeile nach einem eventuellen Blättern mit der Blätterleiste neu zu bestimmen.