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.
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.
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).
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'.
!
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.
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 :
DYNP_GET_STEPL
(IMPORTING povstepl)DYNP_VALUES_READ
(lui passer dyname, dynumb et cocher translate_to_upper, ça ne fait pas de mal ; alimenter la table dynpfields avec stepl et fieldname ; récupérer à la sortie dynpfields-fieldvalue).