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 |