Les Search Helps (aides à la recherche) fournissent une aide de sélection F4 pour les champs de saisie. Elles peuvent être définies dans le Data Dictionary ou créées de manière programmatique et aident les utilisateurs à sélectionner des valeurs valides.
Types d’aides à la recherche
| Type | Description |
|---|---|
| Elementary | Aide à la recherche simple sur une table/vue |
| Collective | Collection de plusieurs aides Elementary |
| Exit | Aide à la recherche programmatique avec code ABAP |
| Append | Extension d’aides à la recherche existantes |
Exemples
1. Elementary Search Help (SE11)
Transaction : SE11 -> Aide à la recherche
Nom : ZSH_CUSTOMER
Propriétés :- Méthode de sélection : KNA1 (Table)- Type de dialogue : Standard
Paramètres :| Champ SHLP | Import | Export | LPos | SPos | Élém. données ||------------|--------|--------|------|------|---------------|| KUNNR | X | X | 1 | 1 | KUNNR || NAME1 | | | 2 | 2 | NAME1_GP || ORT01 | | | 3 | 3 | ORT01_GP || LAND1 | X | | 4 | 4 | LAND1_GP |2. Lier l’aide à la recherche à un élément de données
Dans SE11 -> Ouvrir l'élément de données :
Onglet : Autres propriétés- Aide à la recherche : ZSH_CUSTOMER- Paramètre : KUNNR3. Lier l’aide à la recherche à un champ de table
Dans SE11 -> Ouvrir la table :
Champ KUNNR :- Aide à la recherche : ZSH_CUSTOMER- Paramètre aide à la recherche : KUNNR4. Collective Search Help
Transaction : SE11 -> Aide à la recherche
Nom : ZSH_CUSTOMER_COLL (Collective)
Aides à la recherche incluses :| Aide à la recherche | Affectation paramètres ||----------------------|------------------------|| ZSH_CUST_BY_ID | KUNNR -> KUNNR || ZSH_CUST_BY_NAME | NAME1 -> NAME1 || ZSH_CUST_BY_CITY | ORT01 -> ORT01 |5. Aide F4 programmatique
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.
" Appeler l'aide F4 CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST" EXPORTING tabname = 'MARA" fieldname = 'MATNR" searchhelp = 'MAT1' " Aide à la recherche standard Material 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. Aide F4 avec liste de valeurs personnalisée
PARAMETERS: p_status TYPE char1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_status. DATA: lt_values TYPE TABLE OF ddshretval.
" Liste de valeurs personnalisée DATA: BEGIN OF lt_status OCCURS 0, value TYPE char1, text TYPE char40, END OF lt_status.
lt_status = VALUE #( ( value = 'A' text = 'Actif' ) ( value = 'I' text = 'Inactif' ) ( value = 'B' text = 'Bloqué' ) ( value = 'D' text = 'Supprimé' ) ).
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST" EXPORTING retfield = 'VALUE" dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'P_STATUS" value_org = 'S' " Structure 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
" Module fonctionnel : ZSH_EXIT_CUSTOMER" Inscrit comme Exit dans l'aide à la recherche
FUNCTION zsh_exit_customer.*"----------------------------------------------------------------------*"*"Interface locale :*" 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'. " Avant affichage : Une seule entrée -> reprendre directement
WHEN 'SELECT'. " Sélectionner les données " Appliquer des filtres supplémentaires
" Filtrer le résultat (ex. seulement clients actifs) DELETE record_tab WHERE ( field = 'SPERR' AND value <> space ).
WHEN 'DISP'. " Avant l'affichage du dialogue
WHEN 'RETURN'. " Après sélection, avant retour " Remplir des champs supplémentaires
ENDCASE.
ENDFUNCTION.8. Aide à la recherche dynamique
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.
" Charger les données dynamiquement 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.
" Afficher F4 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.
" UtilisationDATA(lv_customer) = zcl_dynamic_f4=>show_f4( iv_table = 'KNA1" iv_field = 'KUNNR" iv_where = 'LAND1 = ''DE''").9. Sélection multiple (Multiple Selection)
PARAMETERS: p_matnr TYPE matnr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr. DATA: lt_return TYPE TABLE OF ddshretval.
" F4 avec sélection multiple CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST" EXPORTING tabname = 'MARA" fieldname = 'MATNR" multiple_choice = abap_true " Sélection multiple TABLES return_tab = lt_return EXCEPTIONS OTHERS = 1.
" Traiter toutes les valeurs sélectionnées LOOP AT lt_return INTO DATA(ls_return). " Insérer dans Range ou traiter APPEND VALUE #( sign = 'I" option = 'EQ" low = ls_return-fieldval ) TO s_matnr. ENDLOOP.10. Aide F4 avec dépendances
PARAMETERS: p_vkorg TYPE vkorg, p_vtweg TYPE vtweg.
" Canal de distribution dépendant de l'organisation commercialeAT 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 : Quel champ écran fournit VKORG ? APPEND VALUE #( fldname = 'VKORG" dession = p_vkorg ) TO lt_mapping.
" F4 avec restriction 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. Aide à la recherche avec dialogue popup
DATA: lt_fieldcat TYPE TABLE OF dfies, lt_data TYPE TABLE OF kna1, lv_selected TYPE kunnr.
" Charger les donnéesSELECT * FROM kna1 WHERE land1 = 'DE" INTO TABLE @lt_data UP TO 100 ROWS.
" Créer le catalogue de champsCALL FUNCTION 'DDIF_FIELDINFO_GET" EXPORTING tabname = 'KNA1" TABLES dfies_tab = lt_fieldcat EXCEPTIONS OTHERS = 1.
" Afficher seulement certains champsDELETE lt_fieldcat WHERE fieldname NOT IN ('KUNNR', 'NAME1', 'ORT01').
" Afficher le popupCALL 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.
" Form de callback pour logique supplémentaireFORM f4_callback TABLES record_tab STRUCTURE seahlpres CHANGING shlp TYPE shlp_descr callcontrol LIKE ddshf4ctrl. " Traitement supplémentaireENDFORM.12. CDS View comme aide à la recherche
" CDS View avec annotation d'aide à la recherche@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}
" Référencer dans l'élément de données ou le champ" ou de manière programmatique :SELECT FROM zi_customersearch WHERE customername LIKE @lv_search_term INTO TABLE @DATA(lt_results).13. Aide à la recherche pour ALV
" Aide F4 dans ALV-GridDATA: lt_customers TYPE TABLE OF kna1.
" Créer ALVcl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_alv) CHANGING t_table = lt_customers).
" Doter la colonne de F4DATA(lo_columns) = lo_alv->get_columns( ).DATA(lo_column) = CAST cl_salv_column_table( lo_columns->get_column( 'LAND1' )).
" Aide F4 automatiquement active via l'élément de données" Pour F4 personnalisé :lo_column->set_f4( if_salv_c_bool_sap=>true ).lo_column->set_f4_checktable( abap_true ).
lo_alv->display( ).14. Append Search Help
" Étendre une aide à la recherche existante (sans modification)
Transaction : SE11 -> Aide à la recherche
1. Ouvrir l'aide à la recherche standard (ex. MAT1)2. Extensions -> Créer une aide Append3. Nom : ZSH_MAT1_APPEND
L'aide Append est automatiquement intégrée dansla Collective Search Help.15. Exemple pratique : Classe F4 complète
CLASS zcl_f4_helper DEFINITION. PUBLIC SECTION. " F4 générique pour n'importe quelle table 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 avec liste de valeurs fixes 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 pour clients CLASS-METHODS: for_customer IMPORTING iv_land1 TYPE land1 OPTIONAL RETURNING VALUE(rv_kunnr) TYPE kunnr.
" F4 pour articles 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.Transactions importantes
| Transaction | Description |
|---|---|
| SE11 | Data Dictionary (Aides à la recherche) |
| SE37 | Search Help Exits |
Notes importantes / Bonnes pratiques
- Elementary pour des recherches simples sur une table.
- Collective pour plusieurs possibilités de recherche.
- Exit pour une logique et des filtres complexes.
- Liaison à l’élément de données pour F4 automatique.
- F4IF_INT_TABLE_VALUE_REQUEST pour des listes de valeurs personnalisées.
- Dépendances à mapper via dynpfld_mapping.
- Append pour extension sans modification.
- CDS Views avec annotations @Search.
- Combinez avec Selection Screens pour les reports.