Search Helps (Suchhilfen) bieten F4-Wertehilfe für Eingabefelder. Sie können im Data Dictionary definiert oder programmatisch erstellt werden und unterstützen Benutzer bei der Auswahl gültiger Werte.
Suchhilfe-Typen
| Typ | Beschreibung |
|---|---|
| Elementary | Einfache Suchhilfe auf einer Tabelle/View |
| Collective | Sammlung mehrerer Elementary-Suchhilfen |
| Exit | Programmatische Suchhilfe mit ABAP-Code |
| Append | Erweiterung bestehender Suchhilfen |
Beispiele
1. Elementary Search Help (SE11)
Transaktion: SE11 -> Suchhilfe
Name: ZSH_CUSTOMER
Eigenschaften:- Selektionsmethode: KNA1 (Tabelle)- Dialog-Typ: Standard
Parameter:| SHLPfeld | Import | Export | LPos | SPos | Datenelem ||----------|--------|--------|------|------|-----------|| KUNNR | X | X | 1 | 1 | KUNNR || NAME1 | | | 2 | 2 | NAME1_GP || ORT01 | | | 3 | 3 | ORT01_GP || LAND1 | X | | 4 | 4 | LAND1_GP |2. Suchhilfe an Datenelement anbinden
In SE11 -> Datenelement öffnen:
Reiter: Weitere Eigenschaften- Suchhilfe: ZSH_CUSTOMER- Parameter: KUNNR3. Suchhilfe an Tabellenfeld anbinden
In SE11 -> Tabelle öffnen:
Feld KUNNR:- Suchhilfe: ZSH_CUSTOMER- Suchhilfe-Parameter: KUNNR4. Collective Search Help
Transaktion: SE11 -> Suchhilfe
Name: ZSH_CUSTOMER_COLL (Collective)
Enthaltene Suchhilfen:| Suchhilfe | Parameter-Zuordnung ||------------------|---------------------|| ZSH_CUST_BY_ID | KUNNR -> KUNNR || ZSH_CUST_BY_NAME | NAME1 -> NAME1 || ZSH_CUST_BY_CITY | ORT01 -> ORT01 |5. Programmatische F4-Hilfe
PARAMETERS: p_matnr TYPE matnr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr. DATA: lt_return TYPE TABLE OF ddshretval, lt_dynpfields TYPE TABLE OF dynpread, lv_matnr TYPE matnr.
" F4-Hilfe aufrufen CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING tabname = 'MARA' fieldname = 'MATNR' searchhelp = 'MAT1' " Standard Material-Suchhilfe dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'P_MATNR' TABLES return_tab = lt_return EXCEPTIONS field_not_found = 1 no_help_for_field = 2 inconsistent_help = 3 no_values_found = 4 OTHERS = 5.
IF sy-subrc = 0 AND lt_return IS NOT INITIAL. p_matnr = lt_return[ 1 ]-fieldval. ENDIF.6. F4-Hilfe mit eigener Werteliste
PARAMETERS: p_status TYPE char1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_status. DATA: lt_values TYPE TABLE OF ddshretval.
" Eigene Werteliste DATA: BEGIN OF lt_status OCCURS 0, value TYPE char1, text TYPE char40, END OF lt_status.
lt_status = VALUE #( ( value = 'A' text = 'Aktiv' ) ( value = 'I' text = 'Inaktiv' ) ( value = 'B' text = 'Gesperrt' ) ( value = 'D' text = 'Gelöscht' ) ).
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'VALUE' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'P_STATUS' value_org = 'S' " Struktur TABLES value_tab = lt_status return_tab = lt_values EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3.
IF sy-subrc = 0 AND lt_values IS NOT INITIAL. p_status = lt_values[ 1 ]-fieldval. ENDIF.7. Search Help Exit
" Function Module: ZSH_EXIT_CUSTOMER" Wird in Search Help als Exit eingetragen
FUNCTION zsh_exit_customer.*"----------------------------------------------------------------------*"*"Lokale Schnittstelle:*" TABLES*" SHLP_TAB TYPE SHLP_DESCR_TAB_T*" RECORD_TAB STRUCTURE SEAHLPRES*" CHANGING*" VALUE(SHLP) TYPE SHLP_DESCR_T*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL*"----------------------------------------------------------------------
DATA: lt_results TYPE TABLE OF seahlpres.
CASE callcontrol-step. WHEN 'SELONE'. " Vor Anzeige: Nur ein Eintrag -> direkt übernehmen
WHEN 'SELECT'. " Daten selektieren " Zusätzliche Filter anwenden
" Ergebnis filtern (z.B. nur aktive Kunden) DELETE record_tab WHERE ( field = 'SPERR' AND value <> space ).
WHEN 'DISP'. " Vor Dialog-Anzeige
WHEN 'RETURN'. " Nach Auswahl, vor Rückgabe " Zusätzliche Felder befüllen
ENDCASE.
ENDFUNCTION.8. Dynamische Suchhilfe
CLASS zcl_dynamic_f4 DEFINITION. PUBLIC SECTION. CLASS-METHODS: show_f4 IMPORTING iv_table TYPE tabname iv_field TYPE fieldname iv_where TYPE string OPTIONAL RETURNING VALUE(rv_value) TYPE string.
CLASS-METHODS: show_f4_for_internal_table IMPORTING it_values TYPE ANY TABLE iv_return_field TYPE fieldname RETURNING VALUE(rv_value) TYPE string.ENDCLASS.
CLASS zcl_dynamic_f4 IMPLEMENTATION. METHOD show_f4. DATA: lt_return TYPE TABLE OF ddshretval, lt_data TYPE REF TO data.
" Daten dynamisch laden CREATE DATA lt_data TYPE TABLE OF (iv_table). ASSIGN lt_data->* TO FIELD-SYMBOL(<ft_data>).
IF iv_where IS INITIAL. SELECT * FROM (iv_table) INTO TABLE @<ft_data> UP TO 500 ROWS. ELSE. SELECT * FROM (iv_table) WHERE (iv_where) INTO TABLE @<ft_data> UP TO 500 ROWS. ENDIF.
" F4 anzeigen CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = iv_field value_org = 'S' TABLES value_tab = <ft_data> return_tab = lt_return EXCEPTIONS OTHERS = 1.
IF sy-subrc = 0 AND lt_return IS NOT INITIAL. rv_value = lt_return[ 1 ]-fieldval. ENDIF. ENDMETHOD.
METHOD show_f4_for_internal_table. DATA: lt_return TYPE TABLE OF ddshretval.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = iv_return_field value_org = 'S' TABLES value_tab = it_values return_tab = lt_return EXCEPTIONS OTHERS = 1.
IF sy-subrc = 0 AND lt_return IS NOT INITIAL. rv_value = lt_return[ 1 ]-fieldval. ENDIF. ENDMETHOD.ENDCLASS.
" VerwendungDATA(lv_customer) = zcl_dynamic_f4=>show_f4( iv_table = 'KNA1' iv_field = 'KUNNR' iv_where = 'LAND1 = ''DE''').9. Mehrfachselektion (Multiple Selection)
PARAMETERS: p_matnr TYPE matnr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr. DATA: lt_return TYPE TABLE OF ddshretval.
" F4 mit Mehrfachauswahl CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING tabname = 'MARA' fieldname = 'MATNR' multiple_choice = abap_true " Mehrfachauswahl TABLES return_tab = lt_return EXCEPTIONS OTHERS = 1.
" Alle ausgewählten Werte verarbeiten LOOP AT lt_return INTO DATA(ls_return). " In Range einfügen oder verarbeiten APPEND VALUE #( sign = 'I' option = 'EQ' low = ls_return-fieldval ) TO s_matnr. ENDLOOP.10. F4-Hilfe mit Abhängigkeiten
PARAMETERS: p_vkorg TYPE vkorg, p_vtweg TYPE vtweg.
" Vertriebsweg abhängig von VerkaufsorganisationAT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vtweg. DATA: lt_return TYPE TABLE OF ddshretval, lt_mapping TYPE TABLE OF dselc, lt_flds TYPE TABLE OF dfies.
" Mapping: Welches Bildschirmfeld liefert VKORG? APPEND VALUE #( fldname = 'VKORG' dession = p_vkorg ) TO lt_mapping.
" F4 mit Restriktion CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING tabname = 'TVKOV' fieldname = 'VTWEG' TABLES return_tab = lt_return dynpfld_mapping = lt_mapping EXCEPTIONS OTHERS = 1.
IF lt_return IS NOT INITIAL. p_vtweg = lt_return[ 1 ]-fieldval. ENDIF.11. Suchhilfe mit Popup-Dialog
DATA: lt_fieldcat TYPE TABLE OF dfies, lt_data TYPE TABLE OF kna1, lv_selected TYPE kunnr.
" Daten ladenSELECT * FROM kna1 WHERE land1 = 'DE' INTO TABLE @lt_data UP TO 100 ROWS.
" Feldkatalog erstellenCALL FUNCTION 'DDIF_FIELDINFO_GET' EXPORTING tabname = 'KNA1' TABLES dfies_tab = lt_fieldcat EXCEPTIONS OTHERS = 1.
" Nur bestimmte Felder anzeigenDELETE lt_fieldcat WHERE fieldname NOT IN ('KUNNR', 'NAME1', 'ORT01').
" Popup anzeigenCALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'KUNNR' value_org = 'S' callback_program = sy-repid callback_form = 'F4_CALLBACK' TABLES value_tab = lt_data field_tab = lt_fieldcat return_tab = lt_return EXCEPTIONS OTHERS = 1.
" Callback-Form für zusätzliche LogikFORM f4_callback TABLES record_tab STRUCTURE seahlpres CHANGING shlp TYPE shlp_descr callcontrol LIKE ddshf4ctrl. " Zusätzliche VerarbeitungENDFORM.12. CDS View als Suchhilfe
" CDS View mit Suchhilfe-Annotation@AbapCatalog.viewEnhancementCategory: [#NONE]@Search.searchable: truedefine view entity ZI_CustomerSearch as select from kna1{ @Search.defaultSearchElement: true @Search.fuzzinessThreshold: 0.8 key kunnr as Customer,
@Search.defaultSearchElement: true name1 as CustomerName,
ort01 as City, land1 as Country}
" In Datenelement oder Feld referenzieren" oder programmatisch:SELECT FROM zi_customersearch WHERE customername LIKE @lv_search_term INTO TABLE @DATA(lt_results).13. Suchhilfe für ALV
" F4-Hilfe in ALV-GridDATA: lt_customers TYPE TABLE OF kna1.
" ALV erstellencl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_alv) CHANGING t_table = lt_customers).
" Spalte mit F4 versehenDATA(lo_columns) = lo_alv->get_columns( ).DATA(lo_column) = CAST cl_salv_column_table( lo_columns->get_column( 'LAND1' )).
" F4-Hilfe über Datenelement automatisch aktiv" Für eigene F4:lo_column->set_f4( if_salv_c_bool_sap=>true ).lo_column->set_f4_checktable( abap_true ).
lo_alv->display( ).14. Append Search Help
" Bestehende Suchhilfe erweitern (ohne Modifikation)
Transaktion: SE11 -> Suchhilfe
1. Standard-Suchhilfe öffnen (z.B. MAT1)2. Erweiterungen -> Append-Suchhilfe anlegen3. Name: ZSH_MAT1_APPEND
Die Append-Suchhilfe wird automatisch in dieCollective Search Help aufgenommen.15. Praktisches Beispiel: Komplette F4-Klasse
CLASS zcl_f4_helper DEFINITION. PUBLIC SECTION. " Generische F4 für beliebige Tabelle CLASS-METHODS: for_table IMPORTING iv_table TYPE tabname iv_field TYPE fieldname iv_dynprog TYPE sy-repid DEFAULT sy-repid iv_dynnr TYPE sy-dynnr DEFAULT sy-dynnr iv_dynprofield TYPE string RETURNING VALUE(rv_value) TYPE string.
" F4 mit fester Werteliste CLASS-METHODS: for_fixed_values IMPORTING it_values TYPE string_table iv_dynprog TYPE sy-repid DEFAULT sy-repid iv_dynnr TYPE sy-dynnr DEFAULT sy-dynnr iv_dynprofield TYPE string RETURNING VALUE(rv_value) TYPE string.
" F4 für Kunden CLASS-METHODS: for_customer IMPORTING iv_land1 TYPE land1 OPTIONAL RETURNING VALUE(rv_kunnr) TYPE kunnr.
" F4 für Material CLASS-METHODS: for_material IMPORTING iv_mtart TYPE mtart OPTIONAL RETURNING VALUE(rv_matnr) TYPE matnr.ENDCLASS.
CLASS zcl_f4_helper IMPLEMENTATION. METHOD for_table. DATA: lt_return TYPE TABLE OF ddshretval.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING tabname = iv_table fieldname = iv_field dynpprog = iv_dynprog dynpnr = iv_dynnr dynprofield = iv_dynprofield TABLES return_tab = lt_return EXCEPTIONS OTHERS = 1.
IF lt_return IS NOT INITIAL. rv_value = lt_return[ 1 ]-fieldval. ENDIF. ENDMETHOD.
METHOD for_fixed_values. DATA: lt_return TYPE TABLE OF ddshretval.
DATA: BEGIN OF lt_vals OCCURS 0, value TYPE string, END OF lt_vals.
LOOP AT it_values INTO DATA(lv_val). lt_vals-value = lv_val. APPEND lt_vals. ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'VALUE' dynpprog = iv_dynprog dynpnr = iv_dynnr dynprofield = iv_dynprofield value_org = 'S' TABLES value_tab = lt_vals return_tab = lt_return EXCEPTIONS OTHERS = 1.
IF lt_return IS NOT INITIAL. rv_value = lt_return[ 1 ]-fieldval. ENDIF. ENDMETHOD.
METHOD for_customer. DATA: lt_return TYPE TABLE OF ddshretval, lt_customers TYPE TABLE OF kna1.
IF iv_land1 IS INITIAL. SELECT * FROM kna1 INTO TABLE @lt_customers UP TO 500 ROWS. ELSE. SELECT * FROM kna1 WHERE land1 = @iv_land1 INTO TABLE @lt_customers UP TO 500 ROWS. ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'KUNNR' value_org = 'S' TABLES value_tab = lt_customers return_tab = lt_return EXCEPTIONS OTHERS = 1.
IF lt_return IS NOT INITIAL. rv_kunnr = lt_return[ 1 ]-fieldval. ENDIF. ENDMETHOD.
METHOD for_material. DATA: lt_return TYPE TABLE OF ddshretval, lt_materials TYPE TABLE OF mara.
IF iv_mtart IS INITIAL. SELECT * FROM mara INTO TABLE @lt_materials UP TO 500 ROWS. ELSE. SELECT * FROM mara WHERE mtart = @iv_mtart INTO TABLE @lt_materials UP TO 500 ROWS. ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'MATNR' value_org = 'S' TABLES value_tab = lt_materials return_tab = lt_return EXCEPTIONS OTHERS = 1.
IF lt_return IS NOT INITIAL. rv_matnr = lt_return[ 1 ]-fieldval. ENDIF. ENDMETHOD.ENDCLASS.Wichtige Transaktionen
| Transaktion | Beschreibung |
|---|---|
| SE11 | Data Dictionary (Suchhilfen) |
| SE37 | Search Help Exits |
Wichtige Hinweise / Best Practice
- Elementary für einfache Suchen auf einer Tabelle.
- Collective für mehrere Suchmöglichkeiten.
- Exit für komplexe Logik und Filter.
- Datenelement-Anbindung für automatische F4.
- F4IF_INT_TABLE_VALUE_REQUEST für eigene Wertelisten.
- Abhängigkeiten über dynpfld_mapping abbilden.
- Append für Erweiterung ohne Modifikation.
- CDS Views mit @Search-Annotationen.
- Kombinieren Sie mit Selection Screens für Reports.