Table of Contents

Search help (matchcode)

Définir une aide à la recherche est rapide et permet à peu de frais de faciliter l'alimentation d'un champ à l'utilisateur. Mais il faut parfois affiner encore le comportement de l'aide à la recherche. cela se fait en implémentant le search help exit.

Search help exit

Pour débuter, il est plus facile de copier le FM F4IF_SHLP_EXIT_EXAMPLE, rien que pour obtenir la signature particulière des “SHE”. Ensuite, il faut savoir que l'exit est appelé plusieurs fois (à différent étapes) mais qu'il est tout à fait possible de les sauter.

Exemple 1 : sélectionner les entrées

Si l'on souhaite simplement sélectionner les données, il ne reste plusqu'à appeler le FM F4UT_RESULTS_MAP pour mettre les données dans le format requis pour l'API des search helps. Il est tout à fait possible de placer un petit callcontrol-step = 'DISP'. tout de suite (ce qui saute les autre étapes).

Exemple 2 : Trier les entrées

Pour modifier l'ordre d'affichage on souhaite n'agir qu'après que le standard a sélectionné les données. On attend que CALLCONTROL-STEP = 'DISP'. puis on appelle le FM F4UT_PARAMETER_SORT.

Astuce : si on sélectionne soi-même les données, on peut tout simplement trier les données de sa table interne. Mais si l'on se contente d'appeler F4UT_RESULTS_MAP, le standard va retrier les entrées par ordre alphabétique derrière sans qu'on lui ai rien demandé… pour prévenir ce comportement irritant, il faut placer un petit callcontrol-sortoff = 'X'. !

Match code "sans" search help

Il est possible de définir un matchcode sans créer d'aide à la recherche en SE11. Pour cela, faire appel au FM F4IF_INT_TABLE_VALUE_REQUEST.

Exemple :

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'IT_FIELD' "Champ alimenté en retour
      dynpprog        = sy-repid " Données écran
      dynpnr          = sy-dynnr
      dynprofield     = 'DYN_FIELD'
      value_org       = 'S'
    TABLES
      value_tab       = wlt_plop "Table des valeurs
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

Ne pas oublier de mettre ça dans un module pai et de l'appeler dans le dynpro :

PROCESS ON VALUE-REQUEST.
FIELD wgt_plop-field MODULE pai.

Ou en SELECTION-SCREEN :

  AT SELECTION-SCREEN ON VALUE-REQUEST FOR field.
 
    PERFORM show_f4_help_field.

Dans un table control

Le cas d'un champ dans un table control est plus chiadé : si l'on veut adapter le search help en fonction d'un autre champ du tableau, cet autre champ n'est pas forcément encore passé dans le module PAI correspondant (et donc dans notre table interne correspondante). Il faut donc :