GUI-Status verwenden 

Ein GUI-Status ist eine selbständige Komponente eine ABAP-Programms. GUI-Status werden mit dem Werkzeug Menu Painter der ABAP Workbench angelegt und bearbeitet. Es gibt drei verschiedene Typen von GUI-Status, nämlich

Die entsprechende Dokumentation geht ausführlich auf das Anlegen von GUI-Status und deren Bestandteile ein. Im folgenden sind die wichtigsten Eigenschaften zusammengefaßt.

GUI-Status

Die Aufgabe eines GUI-Status ist es, dem Benutzer von Dynpros verschiedene Funktionen zur Auswahl zu stellen. Jede Funktion ist mit einem bis zu 20-stelligen Funktionscode verknüpft und ihre Auswahl führt zum Ereignis PAI. Beim jedem Ereignis PAI wird der Funktionscode in das Systemfeld SYST-UCOMM bzw. SY-UCOMM gestellt und dem OK-Feld zugewiesen, falls er nicht leer ist. Ein leerer Funktionscode wird weder in das Feld SY-UCOMM gestellt noch dem OK-Feld zugewiesen. Um mit dem OK-Feld zu arbeiten muß es im Screen Painter mit einem Namen versehen und dadurch deklariert werden. Mehr Informationen zur Auswertung von Funktionscodes finden sich unter Funktionscodes auswerten.

Alle Funktionscodes eines ABAP-Programms außer denen, die nur Drucktasten auf Dynpros zugeordnet sind, werden im Menu Painter definiert und wie folgt verwaltet:

Dabei bestimmt der Typ des GUI-Status, wie die Funktionscodes präsentiert werden:

Dialogstatus sind die allgemeinsten Benutzungsoberflächen für Dynpros und es wird im folgenden nur noch auf sie eingegangen. Für Status für Dialogfenster gilt mit obigen Einschränkungen das Gleiche wie für Dialogstatus. Beide werden weitgehend statisch zu einem ABAP Programm angelegt. Kontextmenüs spielen eine etwas andere Rolle und werden speziell behandelt.

Dialogstatus

Ein Dialogstatus ist eine Zusammenstellung jeweils einer Menuleiste, einer Symbolleiste, einer Drucktastenleiste und einer Funktionstastenbelegung zu einer Benutzungsoberfläche für Dynpros. Bei der Definition eines Dialogstatus im Menu Painter wird jeder Funktionscode einem Menüeintrag einer Menüleiste und/oder einer frei belegbaren Funktionstaste der Tastatur zugeordnet. Funktionscodes, die einer Funktionstaste zugeordnet sind, können einem Symbol einer Symbolleiste oder einer Drucktaste einer Drucktastenleiste zugeordnet werden. Jedem Funktionscode ist ein entweder statischer oder ein dynamischer Funktionstext zugeordnet. Ein dynamischer Funktionstext kann im ABAP Programm kontextsensitiv gesetzt werden.

Die Benutzungsoberfläche ist eine reine Visualisierung der möglichen Funktionen und dient der Bedienbarkeit von Anwendungsprogrammen. Rein technisch gesehen würde es auch genügen, einen Funktionscode im Befehlsfeld der Symbolleiste einzugeben und das PAI-Ereignis durch ENTER auszulösen. In einem Dialogstatus sollten aber alle gewünschten Funktionscodes als Menüeinträge zur Verfügung stehen. Die wichtigsten davon sollten Funktionstasten zugeordnet werden und davon wieder die wichtigsten in der Symbolleiste oder Drucktastenleiste zur Verfügung stehen.

Die Zuordnung der Symbole der Symbolleiste zu bestimmten Funktionstasten ist im Menu Painter vorgeschrieben. Diese Funktionstasten sind nicht frei belegbar, sondern werden durch die Zuordnung eines Funktionscodes zum entsprechenden Symbol aktiviert. Es sollten immer zumindest eines der Symbole (F3), (Shift+F3) und (F12) aktiviert werden, um es dem Benutzer zu ermöglichen, den Bildschirm wie gewohnt zu verlassen. Die Zuordnung von Funktionstasten zu Drucktasten der Drucktastenleiste ist beliebig.

Alle Zuordnungen von Funktionscodes zu Oberflächenelemente sollten entsprechend der Ergonomierichtlinien des SAP Style Guide erfolgen. Der Menu Painter unterstützt dies durch die Funktion Normen einmischen und entsprechenden Prüfungen.

Neben den Funktionscodes für Normale Anwendungsfunktionen, die das Ereignis PAI auslösen, können im Menu Painter auch Funktionscodes mit anderen Funktionen angelegt werden, z.B. um andere Transaktionen aufzurufen oder eine Systemfunktion auszulösen. Auch solche Funktionscodes können Drucktasten, Ankreuzfeldern oder Auswahlknöpfen auf Dynpros zugeordnet werden. Hierfür muß den Funktionscodes im Menu Painter bzw. Screen Painter aber ein anderer Funktionstyp zugeordnet werden.

Bereichsmenüs

Mit dem Menu Painter lassen sich auch sogenannte Bereichsmenüs definieren. Dies sind Benutzungsoberflächen, die zu keinem ABAP-Programm gehören und dementsprechend keine PAI-Ereignisse auslösen dürfen. Sie dürfen nur Funktionscodes enthalten, die Transaktionen oder Systemfunktionen aufrufen. Beispiele für ein Bereichsmenüs sind das Einstiegsbild in das R/3-System (S000) oder das Einstiegsbild der ABAP Workbench (S001).

Besondere Funktionstasten und Funktionscodes

Einige Tasten und Funktionscodes weisen Besonderheiten auf. Im folgenden werden die für Dynpros relevanten Besonderheiten erwähnt. Bei Dialogstatus für Listen sind weitere vordefinierte Belegungen zu beachten.

Reservierte Funktionstasten

Folgende Funktionstasten führen nicht zum Ereignis PAI, sondern sind anders reserviert:

Die Funktionstasten der Symbolleiste

Folgende Funktionstasten sind fest mit Symbolen der Symbolleiste verknüpft. Die Zuordnung von Funktionscodes und die entsprechende Programmierung im ABAP-Programm sollte sich nach dem Zweck des Symbols richten.

Funktionstaste

Symbol

Zweck

Strg+S, F11

Sichern

F3

Zurück

Shift+F3

Beenden

Esc, F12

Abbrechen

Strg+P

Drucken

Strg+F

Suchen

Strg+G

Weiter suchen

Strg+Bild hoch

Erste Seite

Bild hoch

Vorherige Seite

Bild runter

Nächste Seite

Strg+Bild runter

Letzte Seite

Die ENTER-Taste

Die ENTER-Taste gehört zum Symbol der Symbolleiste und ist immer aktiv, auch wenn ihr im GUI-Status kein Funktionscode zugeordnet ist oder überhaupt kein GUI-Status gesetzt ist. Auswahl von ENTER löst immer das Ereignis PAI aus. Folgende Funktionscodes können dabei an SY-UCOMM bzw. das OK-Feld übergeben werden:

Die F2-Taste

Die F2-Taste ist immer mit der Doppelklick-Funktionalität der Maus verknüpft. Wenn der Funktionstaste F2 im GUI-Status ein Funktionscode zugeordnet ist, kann PAI sowohl durch Auswahl von F2, als auch durch einen Doppelklick auf ein Bildschirmelement ausgelöst werden. Der zugehörige Funktionscode wird in beiden Fällen an SY-UCOMM bzw. das OK-Feld übergeben. Falls auch die zugehörige Cursorposition im ABAP-Programm verwendet werden soll, muß diese mit GET CURSOR ermittelt werden.

Dialogstatus setzen

Um einem Dynpro einen Dialogstatus zuzuordnen, verwendet man die ABAP-Anweisung:

SET PF-STATUS <stat> [OF PROGRAM <prog>]
                     [EXCLUDING <f>|<itab>].

Diese Anweisung legt die Benutzungsoberfläche für alle folgenden Dynpros einer Dynprofolge fest, bis eine erneute Anweisung SET PF-STATUS einen anderen Dialogstatus festlegt. Der Dialogstatus <stat> muß als Komponente des ABAP-Programms vorhanden sein, es sei denn es wird durch den Zusatz OF PROGRAM ein Dialogstatus eines anderen Programms <prog> verwendet.

Mit dem Zusatz EXCLUDING kann man das Aussehen und die Funktionalität eines Dialogstatus dynamisch vom Programm aus beeinflussen. Dies kann sinnvoll sein, wenn die einzelnen Benutzungsoberflächen für verschiedene Dynpros nicht stark unterschiedlich sind. 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 C der Länge 20 sein.

Es empfiehlt sich den Dialogstatus für ein Dynpro zum Zeitpunkt PBO des Dynpros zu setzen. Wenn man für ein Dynpro keinen Dialogstatus festlegt, wird es mit der Benutzungsoberfläche des vorhergehenden Dynpros des Programms angezeigt. Wenn für das erste Dynpro eines Programms kein Dialogstatus festgelegt wird, hat es keine Benutzungsoberfläche und der Benutzer kann das Dynpro eventuell nicht verlassen.

GUI-Titel setzen

Zur Benutzungsoberfläche gehört außer dem Dialogstatus auch ein GUI-Titel, der ebenfalls mit dem Werkzeug Menu Painter angelegt wird. Um einem Dynpro einen GUI-Titel zuzuordnen, verwendet man die ABAP-Anweisung:

SET TITLEBAR <tit> [OF PROGRAM <prog>]
                   [WITH <g1 >... <g9>].

Diese Anweisung legt den GUI-Titel für alle folgenden Dynpros einer Dynprofolge fest, bis eine erneute Anweisung SET TITLEBAR einen anderen GUI-Titel festlegt. Der GUI-Titel <tit> muß als Komponente des ABAP-Programms vorhanden sein, es sei denn es wird durch den Zusatz OF PROGRAM ein GUI-Titel eines anderen Programms <prog> verwendet.

Ein GUI-Titel kann bis zu neun verschiedene Platzhalter &1.... &9 enthalten, die durch den Zusatz Option WITH mit den Inhalten der entsprechenden Felder <g1 >.... <g9> ersetzt werden können. Auch einzeln auftretende Zeichen '&' werden nach ihrer Reihenfolge durch den Inhalt des entsprechenden Parameters <gi> ersetzt. Die Ausgabe des Zeichens '&' selbst erreicht man durch die Angabe '&&' im Titel.

Es empfiehlt sich den GUI-Titel für ein Dynpro zum Zeitpunkt PBO des Dynpros zu setzen.

Dialogstatus und Dynpro.

PROGRAM demo_dynpro_gui_status.

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

CALL SCREEN 100.

MODULE init_screen_0100 OUTPUT.
  SET PF-STATUS 'STATUS_100'.
  SET TITLEBAR '100'.
ENDMODULE.

MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
    WHEN OTHERS.
      output = save_ok.
  ENDCASE.
ENDMODULE.

Die statische Folgedynpronummer von Dynpro 100 ist 100 und sein Layout ist:

Der für die Dynprofelder relevante Teil der Elementliste ist wie folgt:

Name

Typ

Format

OUTPUT

I/O

CHAR

OK_CODE

OK

OK

Für das Bildschirmfeld von OUTPUT ist die Eingabemöglichkeit im Screen Painter ausgeschaltet.

Die Bildschirmablauflogik ist:

PROCESS BEFORE OUTPUT.
  MODULE init_screen_0100.

PROCESS AFTER INPUT.
  MODULE user_command_0100.

Im Modul INIT_SCREEN_100 werden zum Zeitpunkt PBO der Dialogstatus STATUS_100 und ein Titel 100 gesetzt. Der Dialogstatus ist wie folgt mit dem Menu Painter angelegt worden:

Menüleiste

Menü Demo:

Funktionscode

Text

SAVE

Sichern

PRINT

Drucken

DELETE

Löschen

EXIT

Beenden

Menü Bearbeiten:

Funktionscode

Text

MARK

Markieren

SELE

Auswählen

SEARCH

Suchen

SEARCH+

Weiter suchen

TOP

Erste Seite

PAGE_UP

Vorherige Seite

PAGE_DOWN

Nächste Seite

BOTTOM

Letzte Seite

CANCEL

Abbrechen

Menü Springen:

Funktionscode

Text

BACK

Zurück

Menü Zusätze:

Funktionscode

Text

FUNCT_F5

Funktion 1

FUNCT_F6

Funktion 2

FUNCT_F7

Funktion 3

FUNCT_F8

Funktion 4

Menü Umfeld:

Funktionscode

Text

MENU_1

Menü 1

MENU_2

Menü 2

MENU_3

Menü 3

Symbolleiste

Symbol

Funktionscode

Text

   

SAVE

Sichern

BACK

Zurück

EXIT

Beenden

CANCEL

Abbrechen

PRINT

Drucken

SEARCH

Suchen

SEARCH+

Weiter suchen

PAGE_UP

Vorherige Seite

PAGE_DOWN

Nächste Seite

BOTTOM

Letzte Seite

CANCEL

Abbrechen

Drucktastenleiste

Position

Funktionscode

Text

1

SELE

2

MARK

3

DELETE

4

FUNCT_F5

Funktion 1

5

FUNCT_F6

Funktion 2

Funktionstasten

Taste

Funktionscode

Text

Ikone

F2

SELE

Auswählen

F9

MARK

Markieren

Shift+F2

DELETE

Löschen

F5

FUNCT_F5

Funktion 1

 

F6

FUNCT_F6

Funktion 2

 

F7

FUNCT_F7

Funktion 3

 

F8

FUNCT_F8

Funktion 4

 

Alle Funktionscodes sind als Menüeinträge vorhanden, aber nicht alle sind Funktionstasten zugeordnet. Die Funktionscodes der Symbolleiste aktivieren die Symbole und belegen automatisch deren Funktionstasten. Einige der zusätzlichen Funktionstasten sind der Drucktastenleiste zugeordnet.

Im Modul USER_COMMAND_100 wird als erstes der Inhalt des Felds OK_CODE der Hilfsvariablen SAVE_OK zugewiesen und OK_CODE wird initialisiert. Dieses Vorgehen ist immer empfohlen, da dadurch zum Zeitpunkt PBO auch das Dynprofeld OK_CODE wieder initialisiert wird und keinen unbeabsichtigten Wert enthält. Dann wird der gewählte Funktionscode dem Feld OUTPUT zugewiesen und dadurch im entsprechenden Bildschirmfeld angezeigt, außer bei BACK, EXIT und CANCEL. Bei letzteren wird das Programm beendet.

Der Funktionscode SELE kann hier beispielsweis wie folgt an das ABAP-Programm übergeben werden:

Die übrigen Funktionscodes entsprechend ihrer Definition und ohne Maus-Doppelklick.