|
Il peut être utile d’implémenter la vérification de clés externes ainsi que l’affichage d’un texte correspondant à cette clé pour vos propres champs de saisie. Ceci est possible avec GuiXT mais il est nécessaire d’invoquer un module de fonction par un “call” pour pouvoir lire les tables correspondantes dans SAP. Vous pouvez utiliser le même module de fonction pour les les données dans toutes les tables (voir plus bas).
Supposons que vous avez créé votre propre champ de saisie pour la saisie d’un numéro de client: InputField (10,1) “Client” (10,20) size=10 name=”kunnr” techname=”KNA1-KUNNR”
Etant donné que l’utilisateur peut saisir directement le numéro du client au lieu d’utiliser l’aide F4, nous voulons vérifier si la valeur saisie est correcte. Pour cela nous utilisons le module de fonction “Z_GUIXT_SELECT_SINGLE” (voir plus bas). En principe, il suffit de transmettre au module de fonction la table de vérification et la condition Where: Call “Z_GUIXT_SELECT_SINGLE” in.TABLENAME=“KNA1″ in.CONDITION=“KUNNR = ‘&V[kunnr]‘” out.FOUND=“found” Ensuite nous pouvons interroger la variable V[found] avec par ex.: // Saisie d’un numéro de client incorrecte? Ceci ne fonctionne pas encore tout à fait, si l’utilisateur ne saisit pas le numéro de client avec 10 positions avec éventuellement des zéros au début. C’est pour quoi nous ajoutons des zéros jusqu’à l’obtention de la longueur de 10 positions avant d’effectuer le test: Set V[k10] “0000000000&V[kunnr]“
Set V[p2] Call “Z_GUIXT_SELECT_SINGLE” in.TABLENAME=“KNA1″ in.CONDITION=“KUNNR = ‘&V[k10]‘” out.FOUND=“found” Nous invoquons la vérification par exemple lorsque l’utilisateur appuie sur la touche “Retour” ou sur “Sauvegarde” (utilisez éventuellement un fichier Include): On Enter process=”check.txt” Il est utile également de positionner le curseur dans le champ en cas d’erreur de saisie. Pour cela nous devons utiliser la commande “SetCurseur” dans le scripte GuiXT; dans l’InputScript nous allons utiliser une variable V qui sera interrogée lors de l’affichage de l’écran dans le scripte GuiXT. Un “SetCursor” direct dans l’InputScript n’est pas possible, étant donné qu’au moment de la vérification l’écran précédent est encore actif. // dans l’InputScript “check.txt” // dans le scripte GuiXT if V[setcursor]
En plus de la vérification de la valeur saisie nous voulons afficher à droite du champ de saisie le nom du client. Nous pouvons le lire directement lors de l’accès de vérification: Call “Z_GUIXT_SELECT_SINGLE” in.TABLENAME=“KNA1″ in.CONDITION=“KUNNR = ‘&V[k10]‘” in.FIELDS=“NAME1″ out.FOUND=“found” table.DATA=“data” Nous pouvons citer sous “FIELDS” tous les champs de sortie, séparés par des virgules, que nous souhaitons afficher. Vos valeurs seront affichées dans l’ordre défini sous forme de lignes supplémentaires à la table DATA. Nous allons mettre les valeurs lues dans des variables, par exemple V[kunnr.name], que nous allons faire afficher par le scripte GuiXT: // dans l’InputScript “check.txt” Set V[kunnr.name] “&text[data]“
Si nous avons besoin de plusieurs champs d’affichage, par exemple le nom et le lieu, nous procédons de manière analogue: // dans l’InputScript “check.txt” CopyText fromText=“data” toString=“s1″ line=1
Maintenant il ne manque plus qu’un petit détail: lorsque l’utilisateur sélectionne le numéro de client par la touche F4, nous souhaitons que le texte correspondant apparaisse automatiquement à droite du champ de saisie. Ceci est possible en ajoutant l’option “searchhelpprocess=…” à la commande InputField: InputField (10,1) “Client” (10,20) size=10 name=”kunnr” techname=”KNA1-KUNNR” searchhelpprocess=”return_kunnr.txt” Dans l’InputScript “return_kunnr.txt” nous lisons également les champs textes pour le numéro de client sélectionné: // InputScript “return_kunnr.txt”
Set V[k10] “0000000000&V[kunnr]“
Set V[p2] Call “Z_GUIXT_SELECT_SINGLE” in.TABLENAME=“KNA1″ in.CONDITION=“KUNNR = ‘&V[k10]‘” in.FIELDS=“NAME1,ORT01″ out.FOUND=“found” table.DATA=“data” Return Eventuellement il pourrait être utile de travailler ici avec un fichier “Include”, pour ne pas avoir à maintenir le même coding dans deux fichiers scripte.
Le module de fonction “Z_GUIXT_SELECT_SINGLE” peut être défini dans une groupe de fonction de votre choix. Il faut toutefois veiller à ce que l’utilisateur RFC ait les droits View pour les tables utilisées car le module de fonction effectue une vérification des droits d’accès.
TYPE ANY, TYPE ANY. ASSIGN WORK TO CASTING TYPE (TABLENAME). * reset output table REFRESH DATA. * reset found-flag FOUND = ”. SELECT SINGLE (FIELDTAB) FROM (TABLENAME) INTO CORRESPONDING FIELDS OF WHERE (CONDITION). IF SY-SUBRC EQ 0. FOUND = ‘X’. LOOP AT FIELDTAB. ASSIGN COMPONENT FIELDTAB-NAME OF STRUCTURE to . IF SY-SUBRC = 0. WRITE TO DATA LEFT-JUSTIFIED. ELSE. DATA = ”. ENDIF. APPEND DATA. ENDLOOP. ENDIF. ENDFUNCTION.
|