Test de clés et textes externes pour vos propres champs de saisie

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” 


 Sap Guixt matchcode21 Test de clés et textes externes pour vos propres champs de saisie

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?
if not V[found]

endif

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]  ”&V[k10]“ -stringlength
Set V[p1]
 ”&V[p2]“ - 9
Set V[k10]
“&V[k10](&V[p1]-&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”

if not V[found]
  Set V[setcursor]
“Client”
  Return
“E: Le client ‘&V[kunnr]‘ n’existe pas” -statusline
endif
 

// dans le scripte GuiXT

InputField (10,1) “Client” (10,20) size=10 name=”kunnr” techname=”KNA1-KUNNR”

if V[setcursor]
  SetCursor F[&V[setcursor]]
  Set V[setcursor] “”
endif
 

Sap Guixt matchcode22 Test de clés et textes externes pour vos propres champs de saisie

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”

if not V[found]
  Set V[setcursor]
“Client”
  Set V[kunnr.name]
“”
  Return
“E: Client ‘&V[kunnr]‘ n’existe pas” -statusline
endif

Set V[kunnr.name] “&text[data]“

// dans le scripte GuiXT

InputField (10,1) “Client” (10,20) size=10 name=”kunnr” techname=”KNA1-KUNNR”
Text (10,33) “&V[kunnr.name]“

Sap Guixt matchcode23 Test de clés et textes externes pour vos propres champs de saisie

 

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”

Call “Z_GUIXT_SELECT_SINGLE” in.TABLENAME=“KNA1″ in.CONDITION=“KUNNR = ‘&V[k10]‘”  in.FIELDS=“NAME1,ORT01″ out.FOUND=found” table.DATA=“data”

CopyText fromText=“data” toString=“s1″ line=1
CopyText fromText=
“data” toString=“s2″ line=2
Set V[kunnr.name]
“&V[s1], &V[s2]“

Sap Guixt matchcode24 Test de clés et textes externes pour vos propres champs de saisie

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] “&V[k10]“ -stringlength
Set V[p1]
“&V[p2]“ - 9
Set V[k10]
“&V[k10](&V[p1]-&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”

CopyText fromText=
“data” toString=“s1″ line=1
CopyText fromText=
“data” toString=“s2″ line=2
Set V[kunnr.name]
“&V[s1], &V[s2]“

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.

Sap Guixt matchcode25 Test de clés et textes externes pour vos propres champs de saisie

 

Sap Guixt matchcode26 Test de clés et textes externes pour vos propres champs de saisie

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.


Test de clés et textes externes pour vos propres champs de saisie