Dynamische Selection-Screens für ABAP Programme

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.

DynamicSelScreenABAP_1

DynamicSelScreenABAP_2

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.

Posted on 17. März 2016 in ABAP, Blog

Back to Top