Funktion | Mit der if-Anweisung können Sie Teile des GuiXT Skripts von Bedingungen abhängig machen. Beispielweise vom aktuellen GUI-Status oder von der Existenz bestimmter Felder im R/3 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”.
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 R/3 Rel.4 möglich)
- if Q[Page=xxxx] Abfrage auf die aktuelle Seite ein
es “tabbed dialog”; für xxxx setzen Sie den Text des entsprechenden Reiters ein
- if Q[ScreenVariant=xxxx] Abfrage auf eine R/3 Transaktionsvariante (zentrales GuiXT script)
- if Q[GuiXTVersion=yyyy Qx x] Abfrage auf aktive GuiXT Version (durch <, = oder >. Siehe auch unten Tips&Tricks)
- 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. Beispielsweise können Sie eine Option HelpDisplay anbieten, bei der Sie eine auf die jeweilige Transaktion zugeschnittene Dokumentation anzeigen (als Bilddatei mit Image oder als rtf oder html Datei mit View). Jeder Benutzer kann dann durch Setzen der Option HelpDisplay selbst entscheiden, ob er die Erläuterungen angezeigt haben möchte oder nicht.
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. Das Abfragen von Feldinhaltswerten ist nicht möglich. Mit dem InputAssistant können Sie globale Variablen abfragen, die Sie in GuiXT Skripten und InputScripts setzen können. |
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
|
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. Das Abfragen von Feldinhaltswerten ist nicht möglich. Mit dem InputAssistant können Sie globale Variablen abfragen, die Sie in GuiXT Skripten und InputScripts setzen können. |
Tips &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 Skript (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
|