Dynamische Selection-Screens in ABAP GUI Anwendungen zu erstellen muss nicht unbedingt kompliziert sein. Unter Verwendung der SAP Funktionsbausteine FREE_SELECTIONS_INIT und FREE_SELECTIONS_DIALOG möchte ich eine Möglichkeit zeigen, wie man recht einfach dynamische Selektionsbilder erstellen kann.
In meinem kleinen Demoprogramm erscheint zuerst ein Popup mit allen verfügbaren Selektionsparametern. Hat man die gewünschten Felder ausgewählt, dann wird in einem weiteren Schritt das auf der Feldselektion basierte Selektionsbild angezeigt.


Man kann natürlich die Selektion der Felder weglassen und die LT_FIELDS Tabelle direkt befüllen, in diesem Beispiel möchte ich aber beide Möglichkeiten zeigen.
REPORT ztest_hartl.
DATA: lt_expr TYPE rsds_texpr.
DATA: lt_tables TYPE TABLE OF rsdstabs.
DATA: wa_selid TYPE rsdynsel-selid.
DATA: lt_ranges TYPE rsds_trange.
DATA: wa_active TYPE i.
DATA: lt_fields TYPE TABLE OF rsdsfields.
* Add table
APPEND INITIAL LINE TO lt_tables ASSIGNING FIELD-SYMBOL(<wa_tables>).
<wa_tables>-prim_tab = 'Y0BW_XF_MEAS_ID'.
UNASSIGN: <wa_tables>.
* Init free selection dialog as popup
CALL FUNCTION 'FREE_SELECTIONS_INIT'
EXPORTING
expressions = lt_expr
IMPORTING
selection_id = wa_selid
expressions = lt_expr
TABLES
tables_tab = lt_tables
EXCEPTIONS
OTHERS = 1.
* Display free selection dialog as popup for field selection
CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
EXPORTING
selection_id = wa_selid
title = 'Selection'
status = 1
as_window = abap_true
IMPORTING
expressions = lt_expr
field_ranges = lt_ranges
number_of_active_fields = wa_active
TABLES
fields_tab = lt_fields
EXCEPTIONS
OTHERS = 1.
* Init free selection dialog
CALL FUNCTION 'FREE_SELECTIONS_INIT'
EXPORTING
expressions = lt_expr
kind = 'F'
IMPORTING
selection_id = wa_selid
expressions = lt_expr
TABLES
tables_tab = lt_tables
fields_tab = lt_fields
EXCEPTIONS
OTHERS = 1.
* Display free selection dialog for data selection
CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
EXPORTING
selection_id = wa_selid
title = 'Selection'
status = 1
as_window = ' '
tree_visible = abap_false
IMPORTING
expressions = lt_expr
field_ranges = lt_ranges
number_of_active_fields = wa_active
TABLES
fields_tab = lt_fields
EXCEPTIONS
OTHERS = 1.
Die selektierten Werte stehen in der Tabelle LT_RANGES bereit und können im weiteren Verlauf des Programmes verwendet werden.
Comments are closed.