====== 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 : * récupérer la ligne courante en utilisant le FM ''DYNP_GET_STEPL'' (IMPORTING povstepl) * Lire la valeur directement dans le dynpro en utilisant le FM ''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).