[ABAP] Expliziter Aufruf einer vorhandenen Suchhilfe

* generischer Parameter für den manuell eine Suchhilfe 'AUFK' angezeigt werden soll
PARAMETERS: p_test TYPE char32.
  
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_test.
  TRY.
      DATA: lv_shlp TYPE shlp_descr.

* shlptype:
* SH	Suchhilfe
* CH	Prüftabelle
* CT	Prüftabelle mit Texttabelle
* FV	Domänenfestwerte
* DV	Festwerte aus Ablauflogik
* CA	Kalender-Hilfe
* CL	Uhrzeit-Hilfe
* SR	Suchhilfe am Datenelement (temporär)
* MC	Matchcode
* MI	Matchcode-Id
* IN	interne Tabelle
      CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
        EXPORTING
          shlpname = 'AUFK'
          shlptype = 'CH'
        IMPORTING
          shlp     = lv_shlp.

* Suchhilfefeld festlegen
* wenn mehrere Felder benötigt werden -> für jedes Feld extra
      ASSIGN lv_shlp-interface[ shlpfield = 'AUFNR' ] TO FIELD-SYMBOL(<fs_shf>).
      <fs_shf>-valfield = abap_true.
      <fs_shf>-value = '*'. " Vorgabewert / Einschränkung für die Suchhilfe

      DATA: f_rc TYPE sy-subrc.
      DATA: it_values TYPE STANDARD TABLE OF ddshretval.

      CALL FUNCTION 'F4IF_START_VALUE_REQUEST'
        EXPORTING
          shlp          = lv_shlp
          disponly      = abap_false
          maxrecords    = 0           " alle Ergebnisse auflisten
          multisel      = abap_false  " Einfachauswahl
        IMPORTING
          rc            = f_rc
        TABLES
          return_values = it_values.  " Rückgabewerte

      IF f_rc = 0.
* Rückgabewert an Parameter übergeben
        p_test = it_values[ fieldname = 'AUFNR' ]-fieldval.
      ENDIF.
    CATCH cx_root INTO DATA(e_txt).
      MESSAGE e_txt->get_text( ) TYPE 'S' DISPLAY LIKE 'E'.
  ENDTRY.

Weiterführende Infos: Link und Link

[ABAP] HTML-Code im cl_gui_html_viewer anzeigen, Eventhandling

* Demoprogramme:
* SAPHTML_EVENTS_DEMO
* SAPHTML_SCRIPT_DEMO
* DEMO_TABLE_EXPRESSIONS

TYPES: ty_it_events TYPE STANDARD TABLE OF cntl_simple_event WITH DEFAULT KEY.

PARAMETERS: p_url TYPE string.

CLASS lcl_events DEFINITION.
  PUBLIC SECTION.

    CLASS-METHODS:
      on_navigate_complete FOR EVENT navigate_complete OF cl_gui_html_viewer
        IMPORTING
            url
            sender.

    CLASS-METHODS:
      on_sapevent FOR EVENT sapevent OF cl_gui_html_viewer
        IMPORTING
            action
            frame
            getdata
            postdata
            query_table
            sender.
ENDCLASS.

CLASS lcl_events IMPLEMENTATION.

* nach Aufbau des Dokuments
  METHOD on_navigate_complete.
    p_url = url.
  ENDMETHOD.

* Link- oder Button-Klick
  METHOD on_sapevent.
    MESSAGE |Action: { action }, get: { getdata }| TYPE 'S'.
  ENDMETHOD.
ENDCLASS.

INITIALIZATION.

  DATA(o_dock) = NEW cl_gui_docking_container( ratio = 50
                                               side = cl_gui_docking_container=>dock_at_bottom
                                               no_autodef_progid_dynnr = 'X' ).

* HTML-Viewer
  DATA(o_html) = NEW cl_gui_html_viewer( parent = o_dock ).

* Eventtypten müssen gesondert registriert werden
  DATA(it_events) = VALUE ty_it_events( ( eventid = cl_gui_html_viewer=>m_id_navigate_complete
                                          appl_event = abap_true )
                                        ( eventid = cl_gui_html_viewer=>m_id_sapevent
                                          appl_event = abap_true ) ).

  o_html->set_registered_events( events = it_events ).

* Eventhandler registrieren
  SET HANDLER lcl_events=>on_navigate_complete FOR o_html.
  SET HANDLER lcl_events=>on_sapevent FOR o_html.

* HTML-Code mit Buttons und Forms
  DATA(it_html) = VALUE html_table( ( |<html>| )
                                    ( |  <head>| )
                                    ( |    <title>Drag & Drop Test</title>| )
                                    ( |  </head>| )
                                    ( |  <script type="text/javascript">| )
                                    ( |    function mouse_click(element)| )
                                    ( |    \{| )
                                    ( |      location.href = "SAPEVENT:" + element;| )
                                    ( |    \}| )
                                    ( |  </script>| )
                                    ( |  <body bgcolor="#AABBCC">| )
                                    ( |    <p><font size=30>Dateien mit der Maus hierher ziehen!</font></p>| )
                                    ( |    <form method="post" action="SAPEVENT:SHOW_INFO?PARAMETER1">| )
                                    ( |      <p><input type="submit" value="Klick!"></p>| )
                                    ( |    </form>| )
                                    ( |    <form method="post" action="">| )
                                    ( |      <a href="SAPEVENT:LINK_KLICK?PARAMETER2">Link</a>| )
                                    ( |    </form>| )
                                    ( |    <button onclick="mouse_click('BTN_CLICK')">Show</button>| )
                                    ( |  </body>| )
                                    ( |</html>| ) ).

* URL zu HTML holen
  DATA: lv_url TYPE swk_url.

  o_html->load_data( IMPORTING
                       assigned_url = lv_url
                     CHANGING
                       data_table   = it_html ).

* HTML anzeigen
  o_html->show_url( url = lv_url ).

[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] Zwei Radiobuttons mit je einem Label in einer Zeile

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE title.
  
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_rb1 RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT (7) lbl1 FOR FIELD p_rb1.
PARAMETERS: p_rb2 RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT (7) lbl2 FOR FIELD p_rb2.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.
  title = 'Auswahl'.
  lbl1 = 'Teil A'.
  lbl2 = 'Teil B'.

[ABAP] Radiobuttons mit Label und Eingabefeldern in einer Zeile

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE title.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_rb1 RADIOBUTTON GROUP grp1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT (15) lbl1 FOR FIELD p_rb1.
PARAMETERS: p_file1 TYPE localfile.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_rb2 RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT (15) lbl2 FOR FIELD p_rb2.
PARAMETERS: p_file2 TYPE localfile.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.
  title = 'Auswahl'.
  lbl1 = 'Datei 1:'.
  lbl2 = 'Datei 2:'.

[ABAP] Popup zur Wert-Eingabe von Datenbankfeldern anzeigen

TYPES: ty_it_fields TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.

DATA: lv_ret TYPE char1.

* field_attr:
*
* space - normale Helligkeit, eingabebereit
* 01     - hell, eingabebereit
* 02     - normale Helligkeit, nicht eingabebereit
* 03     - hell, nicht eingabebereit
* 04     - nicht anzeigen

* Eingabefelder
DATA(it_fields) = VALUE ty_it_fields( ( tabname = 'BKPF' fieldname = 'BUDAT' value = sy-datum field_obl = abap_true )
                                      ( tabname = 'BKPF' fieldname = 'BLART' field_obl = abap_true )
                                      ( tabname = 'MARA' fieldname = 'MATNR' fieldtext = 'MarNr' field_attr = '01' value = '00001' ) ).

* Eingabedialog
CALL FUNCTION 'POPUP_GET_VALUES'
  EXPORTING
    popup_title     = 'Werteeingabe'
  IMPORTING
    returncode      = lv_ret
  TABLES
    fields          = it_fields
  EXCEPTIONS
    error_in_fields = 1
    OTHERS          = 2.

* Auswertung
IF sy-subrc = 0.
  CASE lv_ret.
    WHEN space.
      LOOP AT it_fields ASSIGNING FIELD-SYMBOL(<fs_line>).
        WRITE: / <fs_line>-tabname, <fs_line>-fieldname, <fs_line>-fieldtext, <fs_line>-field_obl, <fs_line>-value.
      ENDLOOP.
    WHEN 'A'.
      WRITE: / 'Abbruch.'.
    WHEN OTHERS.
      WRITE: / 'Fehler.'.
  ENDCASE.
ELSE.
  WRITE: / sy-subrc.
ENDIF.

[ABAP] F4-Suchhilfe anzeigen

DATA: it_return TYPE TABLE OF ddshretval.

PARAMETERS: p_matnr TYPE mara-matnr.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr.
  DATA: it_return TYPE TABLE OF ddshretval.

* f4-hilfe mit übergabe der anzuzeigenden werte in interner tabelle
  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      tabname           = 'MARA'    " Tabellenname mit Werten für die Anzeige und Auswahl
      fieldname         = 'MATNR'  " Auswahl-Spalte der Tabelle für Rückgabewert
      dynpprog          = sy-repid
      dynpnr            = sy-dynnr
      dynprofield       = 'P_MATNR'  " Name des Dynpro-Feldes für die automatische Werterückgabe
    TABLES
      return_tab        = it_return " Rückgabe-Tabelle mit den ausgewählten (geklickten) Elementen
    EXCEPTIONS
      field_not_found   = 1
      no_help_for_field = 2
      inconsistent_help = 3
      no_values_found   = 4
      OTHERS            = 5.

  IF sy-subrc = 0.
    IF lines( it_return ) > 0.
      MESSAGE it_return[ 1 ]-fieldval TYPE 'S'.
    ENDIF.
  ENDIF.