if

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

If