| 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 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[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.
|
|
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 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
|