Funktion Mit der if-Anweisung können Sie Teile des GuiXT Scripts von Bedingungen abhängig machen. Beispielweise vom aktuellen GUI-Status oder von der Existenz bestimmter Felder im SAP Bild.
Bespiel 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: 
 

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:

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:
    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:
    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:

    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:

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

    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:


    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:

    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