[ABAP] Selektionsbildschirm: Auf Änderung der Auswahl in einer Listbox reagieren (OnChange-Ereignis)

* Type für Listbox-Inhalt
TYPES: ty_it_listbox TYPE STANDARD TABLE OF vrm_value WITH DEFAULT KEY.

* Merker für Kommando für ListBox-Change
DATA: lv_ucomm TYPE sy-ucomm.
      
* Listbox auf dem Selektionsbild mit Kommando LB_CHG
* TYPE / Länge des Typs hat Einfluss auf key
PARAMETERS: p_lst TYPE char1 AS LISTBOX VISIBLE LENGTH 20 USER-COMMAND lb_chg.

INITIALIZATION.
* Listbox vorbelegen
  DATA(it_lb) = VALUE ty_it_listbox( ( key = 'A' text = 'Punkt 1' )
                                     ( key = 'B' text = 'Punkt 2' )
                                     ( key = 'C' text = 'Punkt 3' ) ).

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = 'P_LST'
      values          = it_lb
    EXCEPTIONS
      id_illegal_name = 1
      OTHERS          = 2.

* Vorselektion
  IF lines( it_lb ) > 0.
    p_lst = p_lst[ 1 ]-key.
  ENDIF.

AT SELECTION-SCREEN.
* hier das User-Kommando merken
  lv_ucomm = sy-ucomm.

  IF sy-ucomm EQ 'LB_CHG'.
    ...
  ENDIF.
  
AT SELECTION-SCREEN OUTPUT.
* bei Ausgabe auf das gemerkte User-Kommando reagieren
  CASE lv_ucomm.
    WHEN 'LB_CHG'.
      LOOP AT SCREEN INTO DATA(wa).
        ...
        MODIFY SCREEN FROM wa.
      ENDLOOP.
  ENDCASE.

[ABAP] ComboBoxen / Listboxen auf dem Selektionsbild anzeigen

DATA: it_cbval TYPE STANDARD TABLE OF vrm_value WITH DEFAULT KEY.

* TYPE / Länge des Typs hat Einfluss auf key
PARAMETERS: p_l_lang TYPE char3 AS LISTBOX VISIBLE LENGTH 20 USER-COMMAND lb_cmd.

INITIALIZATION.

  it_cbval = VALUE #( ( key = 'A_1' text = 'Punkt eins' )
                      ( key = 'A_2' text = 'Punkt zwei' ) ).

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = 'P_L_LANG'
      values          = it_cbval
    EXCEPTIONS
      id_illegal_name = 1
      OTHERS          = 2.

  IF sy-subrc = 0.
    IF lines( it_cbval ) > 0.
* Vorselektion 'Punkt eins'
      p_l_lang = 'A_1'.
    ENDIF.
  ENDIF.

START-OF-SELECTION.
* akt. Selektion der ComboBox heraussuchen
  TRY.
      DATA(s) = it_cbval[ key = p_l_lang ].

      WRITE: / s-text.
    CATCH cx_root.
  ENDTRY.