Funktion Mit der if -Anweisung können Sie Teile des GuiXT Scripts von Bedingungen abhängig machen. Beispielsweise vom aktuellen GUI-Status oder von der Existenz bestimmter Felder im SAP Bild.
Beispiel GuiXT
if Q[Status=ADD1] or Q[Status=UPD1]  
   Image (1,50) (10,90) "imgupd.gif"  
else  
   Image (1,50) (10,90) "imgdis.gif"  
endif  

Falls der GUI-Status ADD1 oder UPD1 vorliegt, wird die Bilddatei "imgupd.gif" angezeigt, sonst "imgdis.gif" .

Format Sie können erstens die Existenz von Bildelementen abfragen, indem Sie einfach das betreffende Bildelement hinter if nennen, zum Beispiel bedeutet :  
  • if F[Betrag] : "falls ein Feld Betrag angezeigt wird". 
  • if I[Betrag] : "falls ein Eingabefeld Betrag angezeigt wird". 
  • if P[Stornieren] : "falls eine Drucktaste Stornieren angezeigt wird". 
  • if M[Ändern] : "falls ein Menüeintrag Ändern existiert". 
  • if M[Ändern=active] : "falls ein Menüeintrag Ändern existiert und aktiv ist". 

Zweitens können Sie verschiedene Status-Informationen abfragen: 

  • if Q[Status=xxxx] Abfrage auf GUI-Status xxxx
  • if Q[Language=x] Abfrage auf Sprachenschlüssel (einstellig, E=Englisch, D=Deutsch, F=Französisch, I=Italienisch,...)
  • if Q[Database=xxx] Abfrage auf Systemkennung
  • if Q[Client=xxx] Abfrage auf Mandant
  • if Q[User=xxx] Abfrage auf Benutzer
  • if Q[Role=xxx] Abfrage auf Rolle des Benutzers (siehe Rollenspezifische Benutzeroberflächen )
  • if Q[Profile=xxx] Abfrage auf Profile  des Benutzers (siehe Rollenspezifische Benutzeroberflächen )
  • if Q[Transaction=xxxx] Abfrage auf Transaktionscode (Achtung: erst ab SAP Rel.4 möglich)
  • if Q[Page=xxxx] Abfrage auf die aktuelle Seite eines "tabbed dialog"; für xxxx setzen Sie den Text des entsprechenden Reiters ein
  • if Q[ScreenVariant=xxxx] Abfrage auf eine SAP Transaktionsvariante (zentrales GuiXT Script)
  • if Q[GuiXTVersion=yyyy Qx x] Abfrage auf aktive GuiXT Version (durch <,=oder>.  Siehe auch unten Tips&Tricks)
  • if Q[Popup] Abfrage ob der aktuelle Screen als Popup angezeigt wird
  • if Q[InactiveScreen] Abfrage ob auf dem aktuellen Screen ein weiterer Screen als Popup angezeigt wird
  • if Q[StopRequest] Abfrage in einem InputScript, ob der Benutzer einen StopRequest (siehe StatusMessage ) ausgelöst hat.
  • if V[vname=Wert] Abfrage auf den Wert der Variable vname (nur möglich mit InputAssistant)
  • if U[uname=Wert] Abfrage auf den Wert des using-Parameters uname (nur möglich mit InputAssistant)

Drittens können Sie beliebige Benutzeroptionen, die in guixt.ini als 

Option opt1  
Option opt2  

gesetzt sind, durch Q[Option=xxxx] abfragen.

Sie können in guixt.ini maximal 50 Optionen definieren. Jeder Option -String kann bis zu 30 Zeichen lang sein.

Sind Verschachtelungen von if und else möglich?

 

Können logische Ausdrücke eingesetzt werden?

Ja, Beides ist möglich. Beispiel: 
 
GuiXT
if not Q[Status=UPD1]  
   Image (1,50) (10,90) "imgdis.gif"  
else  
   if (F[Company code] or F[Business area]) _ 
       and not F[Order number]  
     Image (1,50) (10,90) "imgupd1.gif"  
   else  
     Image (1,50) (10,90) "imgupd2.gif"  
     PushButton (toolbar) "Cancel" "/OZC27"  
   endif 
endif  
Sie können normale Klammern, " and ", " or " und " not " innerhalb von logischen Ausdrücken einsetzen. Es gelten die normalen logischen Regeln für Reihenfolge und Klammern.

Option -strict bei Variablenvergleich Bei dem Vergleich einer Variablen auf einen Wert durch if V[vname=Wert] (InputAssistant) gelten folgende Regeln:
  • Gross-/Kleinschreibung wird ignoriert
  • Ein Wert der nur aus Nullen "0000" besteht wird wie eine leere Zeichenreihe behandelt
Sie können diese Vergleichsregeln ausser Kraft setzen, also exakt den angegebenen Wert prüfen, durch den Zusatz -strict:
GuiXT
if V[vname=Wert]  -strict  
 ...
endif  
Tipps & Tricks
  • Die Abfrage auf einen Feldinhalt, z.B.  das Feld F[Buchungskreis], ist nur über Variablen möglich:
    GuiXT
    Set V[buk] "&F[Buchungskreis]"  
    if V[buk=0001] 
       ...  
    endif
  • Der Vergleich zweier Variablen V[x1] und  V[x2]  geschieht durch Einsetzen des Vergleichswertes &V[x2], also:
    GuiXT
    if V[x1=&V[x2]] 
       ...  
    endif
  • Erläuterungen zu den Abfragen if Q[Role=xxx] und  if Q[Profile=xxx] finden Sie in dem Abschnitt
    Rollenspezifische Benutzeroberflächen
  • Die Abfrage auf die aktuelle GuiXT Version ist ab GuiXT 2002 Q4 3 unterstützt. Wollen Sie z.B. in einem Script (meist wohl dem logon Script) sicherstellen, daß am Arbeitsplatz eines Benutzers mindestens Version 2002 Q4 5 installiert ist, so können Sie folgende Abfrage verwenden:

    GuiXT
    if Q[GuiXTVersion<2002 Q4 5]
      Message "Bitte neue GuiXT Version installieren 
      \nBei Fragen: S. Bauer Tel 2649"  _ 
      Title="Update erforderlich"
    endif

    In Versionen vor 2002 Q4 3 würde  jedoch keine Nachricht ausgegeben, da die Abfrage dort noch nicht unterstützt war und  die Bedingung Q[GuiXTVersion<....] daher als falsch angesehen wird. Wenn Sie mit älteren Versionen rechnen, fragen Sie besser mit "not ... > " und einer um eins verringerten Versionsnummer ab:

    GuiXT
    Set V[MessagePart1] "Bitte neue GuiXT Version installieren"
    Set V[MessagePart2] "Bei Fragen: S. Bauer Tel 2649"
    								
    if not Q[GuiXTVersion>2002 Q4 4]
    	Message "&V[MessagePart1] \n&V[MessagePart2]"  
    	Title="Update erforderlich"
    endif
    1
  • In einem InputScript ist es sehr verwirrend und keinesfalls zu empfehlen,  Screen -Anweisungen innerhalb von if ... endif zu benutzen. Schlechtes Beispiel:

    GuiXT
    Screen S1
       Set V[x] "a"
       Enter
    
       if V[x=b]
          Screen S2
             Enter "xx"
       else
          Screen S2
             Enter "yy"
       endif

    Nehmen wir an, es erscheint zunächst Screen S1 , dann Screen S2. Wird nun Enter "xx" oder Enter "yy" ausgeführt? Tatsächlich wird im Beispiel oben Enter "xx" ausgeführt, da GuiXT nach Verarbeiten von Screen S1 eine passende Screen-Anweisung zu dem  Screen S2 sucht, ohne eventuell noch offene if-Schachtelungen früherer Screen-Blöcke zu berücksichtigen.
    Stattdessen bitte immer die if-endif-Schachtelung pro Screen-Anweisung abschließen:

    GuiXT
    Screen S1
       Set V[x] "a"
       Enter
    
    Screen S2
       if V[x=b]
          Enter "xx"
       else
          Enter "yy"
       endif
    Falls nötig, können Sie auch mit goto/label arbeiten:
    GuiXT
    Screen S1
       Set V[x] "a"
       Enter
    
       if V[x=b]
          goto l_b
       endif
    
    Screen S2
       Enter "xx"
       goto l_weiter
    
    label l_b
    Screen S2
       Enter "yy"
    
    label l_weiter
Komponente GuiXT