[ABAP] Werte an Dynpro-Elemente übergeben

Variante 1 (ein Wert mit SET_DYNP_VALUE)

PARAMETERS: p_test TYPE char32 DEFAULT ''.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_test.

  DATA: lv_value TYPE char32 VALUE 'Test123'.

  CALL FUNCTION 'SET_DYNP_VALUE'
    EXPORTING
      i_field = 'P_TEST'
      i_repid = sy-repid
      i_dynnr = sy-dynnr
      i_value = CONV dynpread-fieldvalue( lv_value ).

Variante 2 (mehrere Werte mit DYNP_UPDATE_FIELDS für Screens mit PBO/PAI-Event)

MODULE status_0100 OUTPUT.

  IF NOT sy-ucomm = 'QUIT'.
* nur durchlaufen, wenn Kommando 'QUIT' nicht getriggert wird
    DATA(it_dyn_update) = VALUE dynpread_tabtype( ( fieldname = 'P_TEST' fieldvalue = 'Testwert' ) ).

    CALL FUNCTION 'DYNP_UPDATE_FIELDS'
      EXPORTING
        dyname               = sy-repid
        dynumb               = sy-dynnr
      TABLES
        dynpfields           = it_dyn_update
      EXCEPTIONS
        invalid_abapworkarea = 1
        invalid_dynprofield  = 2
        invalid_dynproname   = 3
        invalid_dynpronummer = 4
        invalid_request      = 5
        no_fielddescription  = 6
        undefind_error       = 7
        OTHERS               = 8.

    IF sy-subrc = 0.

    ENDIF.
  
  ELSE.
* wenn Kommando "QUIT", dann Programmende
    LEAVE PROGRAM.
  ENDIF.

ENDMODULE.

Variante 3 (mehrere Werte mit DYNP_VALUES_UPDATE, funktioniert bei Screens ohne PBO/PAI-Event (z.B. Selektionsbild, F4-Hilfe))

* https://www.berater-wiki.de/Funktionsbaustein_DYNP_VALUES_UPDATE
PARAMETERS: p_test TYPE char32 DEFAULT ''.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_test.
* Tabelle mit Feldern / GUI-Elementen, deren Werte gesetzt werden sollen
  DATA(it_dyn_update) = VALUE dynpread_tabtype( ( fieldname = 'P_TEST' fieldvalue = 'Testwert' ) ).

  CALL FUNCTION 'DYNP_VALUES_UPDATE'
    EXPORTING
      dyname               = sy-repid " sy-cprog
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = it_dyn_update
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      undefind_error       = 7
      OTHERS               = 8.

  IF sy-subrc = 0.
* ggf. Screen-Update über Setzen eines Funktionscodes triggern
*    CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'.
  ENDIF.