[ABAP] Werte von Dynpro-Elementen auslesen

Variante 1 (ein Wert mit GET_DYNP_VALUE)

PARAMETERS: p_test TYPE char32 DEFAULT 'Test123'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_test.
  DATA(lv_value) = VALUE char255( ).

* sy-repid und sy-dynnr müssen beim Auslesevorgang auch im akt. Ereignis vorhanden sein, sonst Exception
  CALL FUNCTION 'GET_DYNP_VALUE'
    EXPORTING
      i_field = 'P_TEST'
      i_repid = sy-repid
      i_dynnr = sy-dynnr
    CHANGING
      o_value = lv_value.

  MESSAGE lv_value TYPE 'I'.

Variante 2 (mehrere Werte mit DYNP_VALUES_READ)

PARAMETERS: p_test TYPE char32 DEFAULT 'Test123'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_test.
* Tabelle mit Feldern / GUI-Elementen, die ausgelesen werden sollen
  DATA(it_dyn_read) = VALUE dynpread_tabtype( ( fieldname = 'P_TEST' ) ).

* sy-repid und sy-dynnr müssen beim Auslesevorgang auch im akt. Ereignis vorhanden sein, sonst Exception
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               = sy-repid " sy-cprog
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = it_dyn_read
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      invalid_parameter    = 7
      undefind_error       = 8
      double_conversion    = 9
      stepl_not_found      = 10
      OTHERS               = 11.

  IF sy-subrc = 0.
    IF lines( it_dyn_read ) > 0.
      MESSAGE it_dyn_read[ 1 ]-fieldvalue TYPE 'I'.
    ENDIF.
  ENDIF.

[ABAP] Alle Elemente des Selektionsbildschirmes auslesen

DATA: it_fields TYPE STANDARD TABLE OF dynpread.
DATA: wa_field LIKE LINE OF it_fields.
DATA: lv_field_type TYPE c.
FIELD-SYMBOLS: <field> TYPE any.

PARAMETERS: ... " irgendwelche Selektionsparameter auf dem Selektionsbild plazieren

AT SELECTION-SCREEN.
  " Dynpro Feldwerte lesen vor Feldtransport
  CALL FUNCTION 'DYNP_VALUES_READ'
  EXPORTING
    dyname                   = sy-repid
    dynumb                   = sy-dynnr
    request                  = 'A' " alle Elemente auslesen
    perform_conversion_exits = ' '
    perform_input_conversion = ' '
  TABLES
    dynpfields               = it_fields
  EXCEPTIONS
    OTHERS                   = 11.
    
START-OF-SELECTION.
  " ausgelesene Elemente und deren Werte ausgeben
  LOOP AT it_fields INTO wa_field.
    ASSIGN (wa_field-fieldname) TO <field>.
    DESCRIBE FIELD <field> TYPE lv_field_type.
    WRITE: / |{ <field> }: { lv_field_type }|.
  ENDLOOP.