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