Popup (modal screens)
En abap pour afficher une popup, il “suffit” d'appeler un écran en précisant des coordonnées :
CALL SCREEN dynnr [STARTING AT col1 lin1 [ENDING AT col2 lin2]].
Cependant définir tout un écran pour demander un choix booléen ou une seule valeur est contraignant. Heureusement il existe le FM POPUP_TO_CONFIRM
qui couvre la plupart des cas d'usage de façon dynamique.
Valeurs pour le paramètre ANSWER
de POPUP_TO_CONFIRM
:
- Bouton 1 (Oui) : '1'
- Bouton 2 (Non) : '2'
- Cancel (ou fermer) : 'A'
Astuce : pour demander à l'utilisateur de choisir une valeur parmi un ensemble et si on veut afficher un tableau, il n'y a pas d'autre choix que de créer un écran dédié (le FM POPUP_TO_GET_VALUES
est tout pourri de l'intérieur)… mais si on accepte que le-dit tableau soit à 1 clic, alors il possible d'utiliser tout de même POPUP_TO_CONFIRM
. Le trick réside dans l'utilisation d'un search help custom qui fera un IMPORT .. FROM MEMORY ID ..
sur une variable préalablement exportée en mémoire. Evidemment on altère le résultat du search help qui si la variable est trouvée. L'utilisateur n'a plus qu'à sélectionner la valeur parmi celles affichées dans le matchcode.
Remarque : Si le modal screen est appelé depuis le START-OF-SELECTION
, l'écran devient “blanc” car le SELECTION-SCREEN
n'est déjà plus affiché mais l'écran “suivant” (en dehors du popup) n'est pas encore chargé. En revanche un modal screen appelé depuis un AT SELECTION-SCREEN
s'affiche bien au dessus du (logique).