ABAP SELECTION-SCREEN erklärt: Selektionsbilder gestalten & erweitern

kategorie
ABAP-Statements
Veröffentlicht
autor
Johannes

SELECTION-SCREEN ist keine einzelne Anweisung, sondern eine Familie von Anweisungen, die Du im * Deklarationsteil* eines ABAP-Programms (typischerweise ein REPORT, aber auch in Funktionsgruppen oder Modulpools) verwendest. Ihr Hauptzweck ist es, das Standard-Selektionsbild (Dynpro 1000), das automatisch durch die Deklaration von PARAMETERS und SELECT-OPTIONS erzeugt wird, visuell zu gestalten, zu strukturieren und zu erweitern.

Mit SELECTION-SCREEN-Anweisungen kannst Du:

  • Parameter und Selektionsoptionen in Blöcken gruppieren (mit oder ohne Rahmen und Titel).
  • Elemente gezielt auf einer Zeile anordnen.
  • Kommentare und statische Texte hinzufügen.
  • Horizontale Linien (ULINE) und vertikale Abstände (SKIP) einfügen.
  • Drucktasten (Pushbuttons) hinzufügen, die Benutzeraktionen auslösen.
  • Tabstrips (Reiter) definieren (komplexer).
  • Die Sichtbarkeit oder Eingabebereitschaft von Elementen zur Laufzeit dynamisch steuern (im Ereignis AT SELECTION-SCREEN OUTPUT).

Wichtiger Kontext: Diese Anweisungen definieren das Aussehen und die Struktur des Selektionsbildes. Sie gehören in den Deklarationsteil Deines Programms, vor den eigentlichen Verarbeitungsblöcken wie INITIALIZATION oder START-OF-SELECTION. Die Logik zur dynamischen Anpassung gehört in den Ereignisblock AT SELECTION-SCREEN OUTPUT.

Syntax und wichtige Varianten

Hier sind die gebräuchlichsten SELECTION-SCREEN-Anweisungen:

1. Blöcke definieren

SELECTION-SCREEN BEGIN OF BLOCK <blockname>
[WITH FRAME [TITLE <titel>]]
[NO INTERVALS].
" Hier PARAMETERS und SELECT-OPTIONS einfügen, die zum Block gehören
PARAMETERS p_param TYPE ...
SELECT-OPTIONS s_selopt FOR ...
SELECTION-SCREEN END OF BLOCK <blockname>.
  • WITH FRAME: Erzeugt einen sichtbaren Rahmen um die Elemente.
  • TITLE <titel>: Gibt dem Rahmen eine Überschrift (kann ein Literal oder ein Textsymbol text-xxx sein).
  • NO INTERVALS: Blendet bei allen SELECT-OPTIONS innerhalb dieses Blocks das “Bis”-Feld (Intervallgrenze) aus.

2. Zeilen formatieren

SELECTION-SCREEN BEGIN OF LINE. " Beginnt eine neue Zeile
SELECTION-SCREEN POSITION <spalte>. " Positioniert das nächste Element
PARAMETERS p_feld1 ...
SELECTION-SCREEN POSITION <spalte2>.
PARAMETERS p_feld2 ...
SELECTION-SCREEN END OF LINE. " Ende der Zeilendefinition
SELECTION-SCREEN ULINE [[/]<pos>(<len>)]. " Horizontale Linie (Underline)
" / = Neue Zeile, pos = Startspalte, len = Länge
SELECTION-SCREEN SKIP [<n>]. " Fügt <n> (Standard 1) Leerzeilen ein

3.Kommentare / Texte

SELECTION-SCREEN COMMENT [/]<pos>(<len>) <text>
[FOR FIELD <feldname>]
[VISIBLE LENGTH <vlen>]
[MODIF ID <key>].
  • Zeigt den statischen Text <text> (Literal oder text-xxx) an.
  • FOR FIELD: Verknüpft den Kommentar mit einem Parameter oder Select-Option (z.B. für F1-Hilfe).
  • MODIF ID: Gruppe für dynamische Anpassung (siehe unten).

4. Drucktasten

SELECTION-SCREEN PUSHBUTTON [/]<pos>(<len>) <button_text>
USER-COMMAND <funktionscode>
[VISIBLE LENGTH <vlen>]
[MODIF ID <key>].
  • Erzeugt einen Button. Bei Klick wird AT SELECTION-SCREEN ausgelöst und sy-ucomm enthält den <funktionscode>.

5. Funktionsleiste (Toolbar)

SELECTION-SCREEN FUNCTION KEY <n>. " n = 1, 2, 3, 4 oder 5
  • Aktiviert die Drucktasten FKEY<n> in der Anwendungssymbolleiste (der Text muss im GUI-Status gesetzt werden).

Dynamische Anpassung (im Ereignis AT SELECTION-SCREEN OUTPUT)

Bevor das Selektionsbild angezeigt wird, kannst Du im Ereignis AT SELECTION-SCREEN OUTPUT das Aussehen und Verhalten der Elemente ändern. Dazu weist Du den Elementen bei der Deklaration eine MODIF ID <key> zu und bearbeitest dann die interne Tabelle SCREEN:

AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-group1 = 'KEY'. " 'KEY' ist die MODIF ID
IF <bedingung>.
screen-active = '1'. " Eingabebereit
screen-invisible = '0'. " Sichtbar
screen-required = '1'. " Pflichtfeld
ELSE.
screen-active = '0'. " Nicht eingabebereit
screen-invisible = '1'. " Unsichtbar
screen-required = '0'. " Kein Pflichtfeld
ENDIF.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

Beispiele

1. Gruppierung mit Blöcken und Linien

REPORT z_sel_screen_demo.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_matnr TYPE matnr,
p_werks TYPE werks_d.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN SKIP 1. " Eine Leerzeile
SELECTION-SCREEN ULINE. " Eine Trennlinie
SELECTION-SCREEN SKIP 1. " Eine Leerzeile
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS: s_date FOR sy-datum.
SELECTION-SCREEN END OF BLOCK b2.

2. Elemente auf einer Zeile

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(15) text-003 FOR FIELD p_carrid.
SELECTION-SCREEN POSITION 17.
PARAMETERS: p_carrid TYPE s_carr_id.
SELECTION-SCREEN COMMENT 30(15) text-004 FOR FIELD p_connid.
SELECTION-SCREEN POSITION 47.
PARAMETERS: p_connid TYPE s_conn_id.
SELECTION-SCREEN END OF LINE.

3. Drucktaste mit Aktion

SELECTION-SCREEN PUSHBUTTON /10(25) btn_show USER-COMMAND show.
INITIALIZATION.
btn_show = 'Details anzeigen'. " Text der Taste setzen
AT SELECTION-SCREEN. " Ereignis nach Eingabe, vor START-OF-SELECTION
CASE sy-ucomm.
WHEN 'SHOW'.
MESSAGE 'Aktion "Details anzeigen" wurde ausgelöst.' TYPE 'S'.
" Hier könntest Du z.B. weitere Felder ein/ausblenden
" oder eine Vorverarbeitung starten.
ENDCASE.
START-OF-SELECTION.
WRITE / 'Hauptverarbeitung gestartet.'.

Zusammenfassend:

SELECTION-SCREEN-Anweisungen sind das Werkzeug, um das Standard-Selektionsbild von ABAP-Programmen über die reine Definition von PARAMETERS und SELECT-OPTIONS hinaus zu gestalten. Sie ermöglichen eine bessere visuelle Strukturierung und können durch Ereignisbehandlung (AT SELECTION-SCREEN OUTPUT, AT SELECTION-SCREEN) auch dynamisches Verhalten realisieren. Für komplexere Oberflächen greift man jedoch auf den Screen Painter (SE51) oder moderne UI-Technologien zurück.