[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.

[ABAP] Buttons auf dem Selektionsbildschirm

* Testparameter: Pflichtfeld mit Groß-Kleinschreibung
PARAMETERS: p_text TYPE string LOWER CASE OBLIGATORY DEFAULT 'Test'. " Testtext für Ausgabe

* 1. Button sendet Kommando CMD1
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 2(20) btn1 USER-COMMAND cmd1.    " Button Pos 2 Länge 20, sendet Kommando 'CMD1'
SELECTION-SCREEN END OF LINE.

* 2. Button sendet Kommando CMD2
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 2(20) btn2 USER-COMMAND cmd2.    " Button Pos 2 Länge 20, sendet Kommando 'CMD2'
SELECTION-SCREEN END OF LINE.

* 3. Button sendet Kommando ONLI
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 2(20) btn3 USER-COMMAND onli.    " Button Pos 2 Länge 20, sendet Kommando 'ONLI'
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
* Button-Texte mit Icons festlegen
  btn1 = |{ icon_abap } CMD1 - Weiter|.
  btn2 = |{ icon_activity } CMD2 - Ende|.

* Buttonbeschriftung mit Icon und Quickinfo für btn3 generieren lassen
  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name                  = icon_information
      text                  = 'ONLI - Weiter'
      info                  = 'Quickinfo'
    IMPORTING
      result                = btn3
    EXCEPTIONS
      icon_not_found        = 1
      outputfield_too_short = 2
      OTHERS                = 3.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

AT SELECTION-SCREEN.

* Benutzer-Kommandos des Selektionsbildes abfangen und prüfen
  CASE sy-ucomm.
    WHEN 'CMD1'.
* OK-Code 'ONLI' per Funktionsbaustein setzen
      CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE' " FktBaustein zum setzen von Funktionscodes aufrufen
        EXPORTING
          functioncode           = 'ONLI'     " dann bei START-OF-SELECTION weiter
        EXCEPTIONS
          function_not_supported = 1.
    WHEN 'CMD2'.
* bei Kommando CMD2 das Programm beenden
      LEAVE PROGRAM.
    WHEN 'ONLI'.
* wenn Kommando ONLI (Ausführen (F8)) kommt, dann ohne Aktion gleich zu START-OF-SELECTION weiter
  ENDCASE.

START-OF-SELECTION.
  WRITE: p_text.