|
Fonction |
La commande if vous permet de faire
dépendre des commandes de script de
certaines conditions; par exemple, basé sur le statut
du GUI ou sur l'existence de certains champs dans
l'écran SAP. |
|
Exemple |
if Q[Status=ADD1] or Q[Status=UPD1]
Image (1,50) (10,90) "imgupd.gif"
else
Image
(1,50) (10,90) "imgdis.gif"
endif Si le statut du GUI
est ADD1 ou UPD1, le fichier image "imgupd.gif" apparaîtra,
autrement apparaîtra le fichier image "imgdis.gif".
|
|
Quelles conditions sont
utilisables ? |
Tout d'abord, vous pouvez
vérifier l'existence d'éléments d'écran en nommant
l'élément d'écran correspondant dans la commande if. Par exemple:
- if F[Montant] signifie: "si un champ Montant est affiché sur
l'écran"
- if
I[Montant]
signifie: "si un champ de
saisie
Montant est affiché sur
l'écran"
- if P[Effacer] signifie: "si un bouton poussoir Effacer est affiché sur
l'écran"
- if
M[Modifier] signifie: "si un point de menu
Modifier
existe"
- if
M[Modifier=active] signifie: "si un point de menu
Modifier
existe et est actif"
Vous pouvez également demander l'état des données de
statut:
- if Q[Status=xxxx] Si le statut
du GUI est xxxx
- if Q[Language=x] Si la clé
de langue est x (1 caractère, E=Anglais,
D=Allemand, F=Français, I=Italien,...)
- if Q[Database=xxx] Si
l'identification du système SAP est xxx
- if Q[Client=xxx] Si le mandant
est xxx
- if Q[Role=xxx] Si
l'utilisateur possède le rôle xxx (cf. Interface
utilisateur dépendant des rôles utilisateurs)
- if Q[Profile=xxx] Si
la configuration de l'utilisateur est xxx (cf. Interface
utilisateur dépendant des rôles utilisateurs)
- if Q[User=xxx] Si
l'utilisateur est xxx
- if Q[Transaction=xxxx] Si le code de
la transaction est xxxx (Remarque: possible
seulement à partir de la version 4.0 de SAP)
- if Q[ScreenVariant=xxxx] Si une variante de
transaction SAP xxxx est active (script GuiXT central)
- if Q[Page=xxxx] Si l'onglet dans une
transaction à onglets a la valeur xxxx (xxxx est le texte
affiché sur l'onglet)
- if Q[GuiXTVersion=yyyy
Qx x] Si la version active de
GuiXT (avec <, = ou >. Veuillez vous reporter
également à "conseils et astuces")
- if Q[StopRequest]
Si l'utilisateur à
déclenché un StopRequest (cf. StatusMessage).
- if V[vname=valeur] Si la variable ayant pour
nom vname a la valeur "valeur" (possible uniquement avec
l'InputAssistant)
- if U[uname=valeur] Si le paramètre du using a
la valeur "valeur" (possible uniquement avec
l'InputAssistant)
Vous pouvez
également tester les options utilisateur fixées dans
le fichier guixt.ini:
Option
opt1
Option opt2
avec if Q[Option=xxxx]. Par exemple, vous
pouvez offrir une option HelpDisplay. Lorsque l'utilisateur
active cette option dans le guixt.ini, vous pouvez
afficher des textes d'aide pour certaines transactions,
soit sous forme d'image, à l'aide de la commande Image ou d'un fichier rtf
ou html en utilisant la commande View. Chaque utilisateur
peut décider individuellement si il désire utiliser le
texte d'aide ou non.
Vous pouvez définir
jusqu'à 50 options différentes dans le fichier guixt.ini, chaque Option peut être composé
de 30 caractères.
|
|
Est-il possible d'utiliser
des if else endif cascadés ?
Est-il possible
d'utiliser des expressions logiques?
|
Oui, les deux sont possibles. Exemple:
if not Q[Status=UPD1]
Image (1,50) (10,90) "imgdis.gif"
else
if
(F[Société] or F[Domaine
d'activité]) and
not
F[Commande]
Image (1,50) (10,90) "imgupd1.gif"
else
Image
(1,50) (10,90) "imgupd2.gif"
Pushbutton
(Toolbar) "Cancel"
"/OZC27"
endif
endif
Vous pouvez
utiliser les parenthèses, "and",
"or" et "not" à l'intérieur
d'expressions logiques. Les règles normales de logique
s'appliquent pour les priorités et les parenthèses.
|
|
Option -strict
dans la comparaison d'une variable |
Lors de la comparaison d'une variable avec
une valeur
if V[vname=value]
les règles suivantes sont automatiquement
appliquées:
- Lors de la comparaison
l'écriture en minuscules ou majuscules n'a p a s
d'influence, c'est à dire que "abXY" = "ABxy"
- Toutes les valeurs
consistant uniquement de zéros sont égales et sont également
équivalentes à une expression vide:
"0000" = "0" = ""
Veuillez utiliser l'option
-strict afin de comparer les valeurs sans
appliquer ces règles:
if
V[vname=Wert]
-strict
...
endif
|
Conseils
&
astuces
|
- Vous ne pouvez pas
spécifier directement un champ, par ex.: F[Société] dans une expression
if, veuillez utiliser une variable. Exemple:
Set
V[buk]
"&F[Société]"
if
V[buk=0001]
...
endif
- Pour pouvoir comparer 2
variables V[x1] et V[x2], vous devez utiliser la valeur &V[x2]
dans "if V[x1=valeur]":
if
V[x1=&V[x2]]
...
endif
- Vous trouverez de plus
amples informations sur if Q[Role=xxx]
et
if Q[Profile=xxx]
sous "Documentation
- Special Topics -
Interface utilisateur dépendant
des rôles utilisateurs"
- Le test de la version de
GuiXT n'est possible qu'à partir de la version GuiXT 2002 Q4 3. Si
vous voulez par exemple, dans un script, vérifier (la plupart du temps
dans le script du logon) qu'il y a sur le poste client au
moins la version 2002 Q4 5 d'installée, vous pouvez utiliser le test
suivant:
if Q[GuiXTVersion<2002 Q4 5]
Message "Veuillez
installer la nouvelle version de GuiXT\nContactez pour toute question: S. Bauer Tel 2649"
Title="Mise
à jour nécessaire"
endif
Toutefois ce message ne serait pas non plus affiché dans les versions
de GuiXT antérieures à 2002 Q4 3 car la fonction n'y était pas
encore supportée et que par conséquent la condition Q[GuiXTVersion<....]
serait considérée comme erronée. Si vous pensez trouver des
versions plus anciennes, il vaudrait mieux utiliser "not ... > "
et un numéro de version antérieure à celle souhaitée:
if not Q[GuiXTVersion>2002 Q4 4]
Message "Veuillez
installer la nouvelle version de GuiXT\nContactez pour toute question: S. Bauer Tel 2649"
Title="Mise
à jour nécessaire"
endif
- Nous vous déconseillons
d'utiliser les instructions Screen
dans des if
... endif, le
script
deviendrait difficile à comprendre et
quelques fois les effets seraient assez inattendus. Un exemple de ce qu'il
ne faut pas faire:
Screen S1
Set V[x] "a"
Enter
if V[x=b]
Screen S2
Enter "xx"
else
Screen S2
Enter "yy"
endif
Supposons que
nous ayons Screen S1 et ensuite Screen
S2. Que va exécuter GuiXT, Enter "xx" ou Enter
"yy"? En fait, dans cet exemple Enter
"xx" est exécuté, vu que GuiXT cherche une instruction
screen correspondant à l'écran S2 sans considérer d'éventuelles
boucles if ouvertes de blocs screen précédents. Nous vous
conseillons plutôt de
fermer tous les "if" ouverts dans chaque bloc screen:
Screen S1
Set V[x] "a"
Enter
Screen S2
if V[x=b]
Enter "xx"
else
Enter "yy"
endif
Dans
certains cas, il est utile d'utiliser goto/label:
Screen S1
Set V[x] "a"
Enter
if V[x=b]
goto l_b
endif
Screen S2
Enter "xx"
goto l_continue
label l_b
Screen S2
Enter "yy"
label l_continue
|