Um einem Benutzer während der Listenanzeige einen Dialog mit dem System zu ermöglichen, müssen die angezeigten Listen in der Lage sein, Benutzeraktionen an das ABAP-Programm weiterzugeben. Wie bei
Benutzeraktionen auf Dynpros, werden hierfür Funktionscodes verwendet, die im GUI-Status des Listenbildschirms verwaltet werden. Bei der Definition von GUI-Status für Listen mit dem Werkzeug Menu Painter der ABAP Workbench werden Funktionscodes des ABAP-Programms listenspezifischen Benutzeraktionen zugeordnet.Besonders wichtig für listen ist dabei die Auswahl von Listenzeilen über einen Doppelklick mit der Maus. Wie schon unter
GUI-Status verwenden erwähnt, ist die Doppelklick-Funktionalität der Maus immer mit der F2-Taste verknüpft. Wenn der Funktionstaste F2 im GUI-Status ein Funktionscode zugeordnet ist, wird dieser durch einen Doppelklick ausgewählt.Der Standardlistenstatus
Wie für normale Dynpros können für Listen eigene GUI-Status definiert und diese im Programm über den Befehl SET PF-STATUS mit beliebigen Listenstufen verbunden werden. Falls keine spezifischen GUI-Status gesetzt werden, wird in ausführbaren Programmen automatisch ein Standardlistenstatus für das Listendynpro gesetzt. In anderen Programmen, z.B. beim
Aufruf von Listen aus der Dynproverarbeitung, muß dieser Dialogstatus explizit mitSET PF-STATUS space.
gesetzt werden. Diese Standardoberfläche bietet zumindest immer die unter
Die Standardliste beschriebene Funktionalität.Anders als normale Dialogstatus, wird der Standardlistenstatus vom ABAP-Programm beeinflußt.
Wenn mit den Ereignisschlüsselwörtern AT LINE-SELECTION oder AT PF<nn> im ABAP-Programm Ereignisblöcke definiert sind, werden im Standardlistenstatus weitere Funktionstasten automatisch mit Funktionscodes belegt, die zusätzliche Aktionsmöglichkeiten auf der Standardoberfläche bieten.
Alle anderen Funktionscodes werden entweder von der Laufzeitumgebung abgefangen oder lösen das Ereignis AT USER-COMMAND aus. Letztere müssen mit dem Menu Painter in eigenen GUI-Status definiert werden. Dabei geht man am besten vom Standardlistenstatus aus und erweitert diesen entsprechend.
Eigener Dialogstatus für Listen
Ein Dialogstatus für Listen wird wie üblich mit dem Werkzeug
Menu Painter der ABAP Workbench angelegt. Direkt nach dem Anlegen empfiehlt es sich, über Zusätze ® Vorlage abgleichen als Vorlagestatus den Liststatus auszuwählen. Dieser Status enthält bereits Standardfunktionscodes für die Listenverarbeitung und verteilt sie wie folgt auf Menüs, Symbolleiste und Funktionstasten:
Code |
Menü |
Symbolleiste |
Funktionstaste |
Beschreibung |
%PC |
Liste |
Liste in Datei sichern | ||
%SL |
Liste |
Liste in Office sichern | ||
%ST |
Liste |
Liste in Berichtsbaum sichern | ||
PRI |
Liste |
Strg-P |
Angezeigte Liste drucken | |
%EX |
Liste |
Shift-F3 |
Bearbeitung beenden | |
PICK |
Bearbeiten |
F2 |
Ereignis AT LINE-SELECTION | |
RW |
Bearbeiten |
F12 , ESC |
Bearbeitung Abbrechen | |
%SC |
Bearbeiten |
Strg-F |
Muster suchen | |
%SC+ |
Bearbeiten |
Strg-G |
Muster weiter suchen | |
BACK |
Springen |
F3 |
Eine Stufe zurückgehen | |
P-- |
Strg-Bild hoch |
Zur ersten Fensterseite blättern | ||
P- |
Bild hoch |
Zur vorigen Fensterseite blättern | ||
P+ |
Bild runter |
Zur nächsten Fensterseite blättern | ||
P++ |
Strg- Bild runter |
Zur letzten Fensterseite blättern | ||
%CTX |
Shift-F10 |
Kontextmenü auf Liste |
Weiterhin sind folgende Funktionscodes vordefiniert, belegen aber noch keine Statusfunktionalität. Sie können beliebig auf freie Statuselemente verteilt werden.
Code |
Beschreibung |
PF<nn> |
Ereignis AT PF<nn> |
PP<n> |
Blättern an Anfang von Listenseite <n> |
PP-[<n>] |
Um eine Listenseite bzw. <n> Seiten zurückblättern |
PP+[<n>] |
Um eine Listenseite bzw. <n> Listenseiten vorwärtsblättern |
PS<n> |
Blättern zur Spalte <n> |
PS-- |
Auf erste Spalte der Liste blättern |
PS-[<n>] |
Um eine Spalte bzw. <n> Spalten nach links blättern |
PS+[<n>] |
Um eine Spalte bzw. <n> Spalten nach rechts blättern |
PS++ |
Auf letzte Spalte der Liste blättern |
PZ<n> |
Zur Zeile <n> blättern |
PL-[<n>] |
Zur ersten Zeile der Seite bzw. <n> Zeilen zurückblättern |
PL+[<n>] |
Zur letzten Zeile der Seite bzw. <n> Zeilen vorwärtsblättern |
/.... |
Für andere Systemkommandos |
Bis auf PICK und PF<nn> werden alle Funktionscodes obiger Tabellen von der Laufzeitumgebung abgefangen und ausgeführt. Sie lösen keine Ereignisse aus und können nicht für das Ereignis AT USER-COMMAND verwendet werden.
Der Funktionscode PICK führt immer zum Ereignis AT LINE-SELECTION, wenn der Cursor auf einer Listenzeile positioniert ist. Die Funktionscodes PF<nn> führen immer zum Ereignis AT PF<nn>. Beide lösen daher ebenfalls nicht das Ereignis AT USER-COMMAND aus.
Um das Ereignis AT USER-COMMAND auszulösen können beliebige eigene Funktionscodes definiert werden, die nicht mit den Funktionscodes obiger Tabellen übereinstimmen. Bei den Funktionstasten sind dabei folgende Besonderheiten zu beachten:
Wie schon erwähnt ist ein Doppelklick mit der Maus immer äquivalent zum Drücken der Taste
Die Taste
Die listenspezifischen Vorbelegungen der Vorlage sind Vorschläge, die für spezielle Anforderungen abgeändert werden können. Unter anderem kann man
Dialogstatus setzen
Der Dialogstatus für Listen wird wie für normale Dynpros mit der Anweisung
SET PF-STATUS <stat> [EXCLUDING <f>|<itab>]
[OF PROGRAM <prog>]
[IMMEDIATELY].
gesetzt. Diese Anweisung setzt den Dialogstatus <stat> der aktuellen Ausgabeliste. Der Dialogstatus <stat> muß für das Programm definiert sein, es sei denn es wird durch den Zusatz OF PROGRAM ein Status eines anderen Programms <prog> verwendet. Der gesetzte Status bleibt für alle folgenden Listenstufen bis zur nächsten Anweisung SET PF-STATUS gültig. Das Systemfeld SY-PFKEY enthält immer den Status der aktuellen Liste.
Mit SET PF-STATUS lassen sich also für verschiedene Listenstufen unterschiedliche Benutzungsoberflächen auswählen, um dem Benutzer je nach Anforderung unterschiedliche Funktionen zur Verfügung zu stellen. Mit SET PF-STATUS SPACE wird der Standardlistenstatus gesetzt, der wie oben beschrieben von den Ereignisblöcken des Programms abhängt.
Mit der Option EXCLUDING kann wie bei Dynpros das Aussehen und die Funktionalität eines Status vom Programm aus beeinflußt werden. Dies kann sinnvoll sein, wenn die einzelnen Benutzungsoberflächen für die verschiedenen Listenstufen nicht stark unterschiedlich sein sollen. Dann kann man einen einzigen umfassenden Status definieren und die nicht gewünschten Funktionscodes mit EXCLUDING deaktivieren. Durch die Angabe <f> wird der Funktionscode deaktiviert, der im Feld <f> abgelegt ist. Durch die Angabe <itab> werden alle Funktionscodes deaktiviert, die in der internen Tabelle <itab> abgelegt sind. Das Feld <f> und die Zeilen der Tabelle <itab> sollten vom Typ SY-UCOMM sein.
Der Zusatz IMMEDIATELY ist speziell für die Listenverarbeitung vorgesehen. Mit diesem Zusatz kann man während der Erstellung einer Verzweigungsliste, also innerhalb eines Ereignisblocks, den Status der gerade angezeigten Liste (Index SY-LISTI) ändern. Normalerweise wird der Status der aktuellen Verzweigungsliste (Index SY-LSIND) geändert, die erst am Ende des Verarbeitungsblocks angezeigt wird.
Titel für Listen setzen
Wie bei Dynpros läßt sich der Titel für Listen wie folgt im Programm setzen:
SET TITLEBAR <tit> [WITH <g1
> ... <g9>]Während der Listenverarbeitung setzt diese Anweisung den Titel der Benutzungsoberflächen der Ausgabelisten. Der Titel bleibt bis zur nächsten Anweisung SET TITLEBAR für alle folgenden Bildschirmbilder gültig. Der Titel <tit> muß als Komponente des ABAP-Programms vorhanden sein, es sei denn es wird durch den Zusatz OF PROGRAM ein Titel eines anderen Programms <prog> verwendet.
Wenn der Titel Platzhalter &1 .... &9 bis enthält, werden diese durch den Zusatz WITH der Anweisung SET TITLEBAR durch die Inhalte der entsprechenden Felder <g
1 > .... <g 9 > ersetzt. Auch einzeln auftretende Zeichen '&' werden nach ihrer Reihenfolge durch den Inhalt des entsprechenden Parameters <g i > ersetzt. Die Ausgabe des Zeichens '&' selbst erreicht man durch die Angabe '&&' im Titel.Beispiele
Beispiel für eigenen Dialogstatus auf Listen.
REPORT demo_list_menu_painter.
START-OF-SELECTION.
SET PF-STATUS 'TEST'.
WRITE: 'Basic list, SY-LSIND =', sy-lsind.
AT LINE-SELECTION.
WRITE: 'LINE-SELECTION, SY-LSIND =', sy-lsind.
AT USER-COMMAND.
CASE sy-ucomm.
WHEN 'TEST'.
WRITE: 'TEST, SY-LSIND =', sy-lsind.
ENDCASE.
Für dieses Programm wird ein Status TEST wie folgt mit dem Menu Painter definiert:
Der Benutzer kann entweder über
Beispiel für Setzen des Dialogstatus der aktuellen Liste
REPORT demo_list_set_pf_status_1.
DATA: fcode TYPE TABLE OF sy-ucomm,
wa_fcode TYPE sy-ucomm.
START-OF-SELECTION.
wa_fcode = 'FC1 '. APPEND wa_fcode TO fcode.
wa_fcode = 'FC2 '. APPEND wa_fcode TO fcode.
wa_fcode = 'FC3 '. APPEND wa_fcode TO fcode.
wa_fcode = 'FC4 '. APPEND wa_fcode TO fcode.
wa_fcode = 'FC5 '. APPEND wa_fcode TO fcode.
wa_fcode = 'PICK'. APPEND wa_fcode TO fcode.
SET PF-STATUS 'TEST'.
WRITE: 'PF-Status:', sy-pfkey.
AT LINE-SELECTION.
IF sy-lsind = 20.
SET PF-STATUS 'TEST' EXCLUDING fcode.
ENDIF.
WRITE: 'Line-Selection, SY-LSIND:', sy-lsind,
/ ' SY-PFKEY:', sy-pfkey.
AT USER-COMMAND.
IF sy-lsind = 20.
SET PF-STATUS 'TEST' EXCLUDING fcode.
ENDIF.
WRITE: 'User-Command, SY-LSIND:', sy-lsind,
/ ' SY-UCOMM:', sy-ucomm,
/ ' SY-PFKEY:', sy-pfkey.
Die Funktionscodes FC1 bis FC5 sind im Status TEST definiert, Funktionstasten zugewiesen und auf die Drucktastenleiste gelegt. Weiterhin ist der Funktionscode PICK der Taste
F2 zugewiesen.Nach dem Programmstart kann der Benutzer durch Zeilenauswahl oder Auswahl der Funktionscodes FC1 bis FC5 Verzweigungslisten erzeugen. Bei allen Verzweigungslisten bis auf Listenstufe 20 ist die Benutzeroberfläche TEST die gleiche wie bei der Grundliste.
Auf Listenstufe 20 werden alle Funktionscodes zur Erzeugung von Verzweigungslisten über EXCLUDING ITAB inaktiviert. Dadurch kann der Benutzer keinen Programmabruch durch das Anlegen einer 21. Verzweigungsliste hervorrufen.
Beispiel für Setzen des Dialogstatus der angezeigten Liste
REPORT demo_list_set_pf_status_2.
START-OF-SELECTION.
WRITE: 'SY-LSIND:', sy-lsind.
AT LINE-SELECTION.
SET PF-STATUS 'TEST' IMMEDIATELY.
Nach dem Programmstart zeigt das Ausgabebild die Grundliste mit dem Standardlistenstatus für Zeilenauswahl (mit Funktionscode PICK).
Wählt der Benutzer Auswählen, ändert sich die Benutzeroberfläche. Es wird keine Verzweigungsliste erzeugt, da keine Ausgabeanweisung während dem Ereignis AT LINE-SELECTION ausgeführt wird. Der Status TEST ist wie im vorhergehendem Beispiel definiert.
Beispiel für Titel von Verzweigungslisten.
REPORT demo_list_title .
START-OF-SELECTION.
WRITE 'Click me!' HOTSPOT COLOR 5 INVERSE ON.
AT LINE-SELECTION.
SET TITLEBAR 'TIT' WITH sy-lsind.
WRITE 'Click again!' HOTSPOT COLOR 5 INVERSE ON.
In diesem Programm wird für jede Verzweigungsliste ein neuer Titel gesetzt. Der Titel TIT ist dafür als ‚Titel für Verzweigungsliste &1‘ definiert.