Fonction | La commande if vous permet de faire dépendre des commandes de scripte de certaines conditions; par exemple, basé sur le statut du GUI ou sur l’existence de certains champs dans l’écran R/3.
|
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”
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 R/3)
- if Q[ScreenVariant=xxxx] Si une variante de transaction R/3 xxxx est active (scripte 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″ &nbs
p; 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. L’interrogation de valeurs de champs n’est pas possible. |
Option -strict in variable comparison | When you compare a variable with a value
if V[vname=value]
the following rules are automatically applied:
- The comparison is n o t case sensitive, i.e. “abXY” = “ABxy”l
- All values consisting of zeros only are equal, and are also equal to the empty string: “0000″ = “0″ = “”
Please use the option -strict in order to compare the values without applying these rules: 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 scripte, vérifier (la plupart du temps dans le scripte 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 scripte 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
|