NotationEine Scriptvariable wird mit V[varname] bezeichnet, wobei varname ein frei wählbarer Name ist. Für den Namen gilt:
Tipp: Eine
konsistente Namensgebung für die Variablen ist hilfreich. Zum Beispiel
immer nur Kleinbuchstaben, bei Bedarf durch "_" getrennt, etwa
V[previous_account]. Oder mit Gross- und Kleinbuchstaben: Inhalt der VariablenDer Wert einer Variablen ist immer ein String. Der Wert wird eingesetzt, wenn in einer Scriptzeile ein Ausdruck &V[varname] erkannt wird. Erst nach Ersetzung aller Variablen wird die Anweisung interpretiert.SystemvariablenEinige Variablen sind schon systemseitig vordefiniert. Ihr Name beginnt mit einem Unterstrich gefolgt von Kleinbuchstaben. Beispiele:
Sie finden eine ausführliche Liste der Systemvariablen in der Dokumentation: Systemvariablen. GültigkeitDie Variablen sind global innerhalb eines SAP GUI Modus gültig. Sie sind also sichtbar und behalten ihren Wert in allen anderen Scripten, die im gleichen Modus verarbeitet werden. Wenn der Benutzer eine neue SAP GUI Session beginnt, z.B. durch direkte Eingabe des OK-Codes /OVA01, dann steht in dem neuen Modus ein neues Set von Variablen zur Verfügung.Falls es einmal nötig sein sollte, Werte modusübergreifend zur Verfügung zu haben, können Sie mit Langtextvariablen und den Optionen toSharedText sowie fromSharedText der CopyText-Anweisung arbeiten. Häufiger kommt es vor, dass Parameter eines mit "/O..." aufgerufenen InputScripts im neuen Modus benötigt werden. Die Parameterübergabe in den neuen Modus erfolgt automatisch. Analog ist auch die Rückgabe von Werte aus einem aufgerufenen Modus möglich, siehe Anweisung "ReturnValues". Zusätzlich kann Process verwendet werden, um Skripte modularer und strukturierter zu gestalten. Dabei ist es wichtig zu beachten, dass die Variablen innerhalb von Process-Skripten in einem lokalen Namensraum liegen. Beim Verlassen des Skripts werden diese Variablen freigegeben, sodass beispielsweise das aufrufende Skript keinen Zugriff mehr darauf hat. Es wird daher empfohlen, wenn möglich mit lokalen Variablen zu arbeiten, da so das Risiko verringert wird, unbeabsichtigt andere Variablen zu überschreiben. Variablen zuweisenDurch "Set" weisen Sie einer Variable einen Wert zu. Beispiel:GuiXT
Um einer Variablen den Wert einer anderen Variablen zuzuweisen, arbeiten Sie mit der &V[...]-Notation. Beispiel: GuiXT
Die Schreibweise GuiXT
ist nicht zu empfehlen, denn falls der Wert der Variablen V[MM_nr1] ein Leerzeichen enthält, wird nur der erste Teil des Strings zugewiesen und der restliche Teil als Option zum Set-Befehl interpretiert. Unproblematisch ist das Weglassen nur bei Zahlenwerten, z.B. GuiXT
Wert einer Variablen abfragenMit "if" können Sie abfragen, ob eine Variable einen bestimmten Wert hat. Beispiel:GuiXT
Vorsicht: Die Gleichheit wird hier sehr locker interpretiert :
Der Grund hierfür ist, dass die Variablen sehr häufig zum Vergleich eingegebener Werte benutzt werden, und hier müsste man sonst die automatische Umsetzung in Grossbuchstaben in der SAP-Anwendung bei zahlreichen Feldern sowie die Sonderbehandlung von 000..0 im Script berücksichtigen. Sie können aber durch die Option -strict bei if erreichen, dass auf exakte Gleichheit geprüft wird: GuiXT
Wenn Sie im Vergleich "<" oder ">" statt "=" verwenden, interpretiert GuiXT beide Ausdrücke als Zahlenwerte und vergleicht dann. In folgendem Beispiel fragen wir ab, ob die Variable k einen Wert <100 hat: GuiXT
Kurzform für Abfrage, ob Variable nicht leer istFür die häufig vorkommende Abfrage, ob eine Variable nicht leer ist, können Sie die NotationGuiXT
verwenden. Zwei Variablen vergleichenZum Vergleich zweier Variablen verwenden Sie statt eines festen Vergleichswerts den Ausdruck &V[varname]. Beispiel:GuiXT
Bitte beachten: zwei schliessende Klammen am Ende und keine "..." verwenden. Generisches Rücksetzen einer Menge von VariablenWenn Sie bei "Set" hinter den Variablennamen einen * setzen, erhalten alle Variablen, die mit dem angegebenen Namensteil beginnen, den angegebenen Wert. Das ist praktisch zum Zurücksetzen einer Menge von Variablen, meist wenn eine neue Transaktion beginnt, was Sie über die Systemvariable V[_transactionid] abfragen können. Beispiel:GuiXT
Variablen konkatenierenBei "Set" und jeder anderen Anweisung können Sie mehrere Variablenwerte durch Hintereinanderschreiben zusammenfügen. Beispiel:GuiXT
Dazwischen können sich auch konstante Strings befinden. Beispiel: GuiXT
Teilstrings abgreifenSie können aus einer Variablen Teilstrings entnehmen. Die Notation ist dabei jeweils, dass Sie in runden Klammern dahinter die erste und die letzte gewünschte Position angeben, durch Bindestrich oder Komma getrennt. Beispiel:GuiXT
Jetzt hat V[y] den Wert "31". Ebenso bei GuiXT
Es gibt zwischen den beiden Notationen einen Bedeutungsunterschied, der sich nur in Unicodesystemen bemerkbar macht. GuiXT arbeitet intern dann mit der UTF8-Codierung, und dort belegen manche Zeichen, zum Beispiel Umlaute ä,ö,ü, mehr als 1 Byte. Während (4-6) die Bytes 4 bis 6 abgreift, bezieht sich (4,6) auf die Zeichen 4 bis 6. Beispiel: GuiXT
Jetzt hat V[y] den Wert "nch". Dagegen bei GuiXT
den Wert "che". Da in Variablen auch Strukturen abgelegt werden können, deren Komponenten aus binären oder gepackten Zahlen bestehen, kann nicht generell die Zeichen-Interpretation verwendet werden. Länge eines Strings in Bytes oder in ZeichenDie Option -stringLength bei Set liefert die Länge einer Zeichenreihe in Bytes, während -charCount die Anzahl der darin enthaltenen Zeichen liefert. In Unicode-Systemen können die beiden Werte unterschiedlich sein.Beispiel: GuiXT
GuiXT
V[leng] ist 7 in nicht-Unicodesystemen und 8 in Unicodesystemen, da 'ü' in UTF8 zwei Bytes belegt. Dagegen ist V[count] immer 7. Tipp: Verwenden Sie -stringLength in Verbindung mit der Teilstringnotation (i-k) und -charCount in Verbindung mit der Teilstringnotation (i,k); siehe Beispiel im nächsten Abschnitt. Teilstrings mit variablen PositionenDie Positionsangaben für Teilstrings können variabel sein, also zum Beispiel (&V[i],&V[k]) statt (5,8), wobei V[i] und V[k] die gewünschten Positionen als Ziffern enthalten. In dem folgenden Beispiel löschen wir in einem gegebenen String alle Punkte; wir verwenden Rechenoperationen für Variablen (siehe unten). Der String V[in] wird Zeichen für Zeichen auf '.' untersucht und dabei der Ausgabestring V[out] aufgebaut.GuiXT
Komponenten aus SAP-Strukturen abgreifenBeim Aufruf von Funktionsbausteinen erhalten Sie häufig Informationen als SAP-Struktur, aus der Sie die einzelnen Komponenten entnehmen müssen. Hier ist das Arbeiten mit festen Offsets und Längen sehr fehleranfällig. GuiXT unterstützt die symbolische Notation über eine SAP Dictionary-Struktur. Sie nennen hinter der Variablen in runden Klammen die SAP Dictionary-Struktur und dann, durch Bindestrich abgetrennt, den Namen der Komponente. Als Beispiel lesen wir die Adressdaten zu einer Kundennummer und greifen den Ort ab:GuiXT
Erläuterung: Der Funktionsbaustein "BAPI_CUSTOMER_GETDETAIL2" besitzt einen Export-Parameter "CUSTOMERADDRESS". Dieser wird in unsere Variable V[addr] gestellt. Laut SAP Funktionsbibliothek ist die Dictionary-Struktur des Parameters "CUSTOMERADDRES" "BAPICUSTOMER_04", und dort befindet sich der Ort in der Komponente "CITY". Häufig liefern Funktionsbausteine auch Tabellen zurück, bei denen jede Zeile eine SAP-Struktur besitzt, auf die wir mit der symbolischen Notation zugreifen können. Bei Verwenden von VersionNumber werden die Strukturinformation im GuiXT Cache (lokale Dateien) gespeichert, sodass das relativ aufwändige Lesen aus dem SAP Repository nur bei Ändern der VersionNumber anfällt. Alternativ kann auch das OpenCall-Interface genutzt werden. Damit werden die Konversionen automatisch für externe und interne Formate in beide Richtungen durchgeführt, sodass die oben genannten Schritte sowie die in Abschnitt 15 nicht mehr notwendig sind. Komponenten in SAP Strukturen setzenAnalog können Sie in einer Variable Teilstrings setzen. Dabei können Sie mit festen Offsets und Längen arbeiten oder mit symbolischen Namen laut SAP-Dictionary. Als Beispiel lesen wir alle Kunden mit Nummern zwischen 1 und 50 über den Funktionsbaustein BAPI_CUSTOMER_GETLIST, der als Eingabe eine Tabelle erwartet, in der jede Zeile ein Kundennummernintervall enthält.GuiXT
BerechnugenDie Set Anweisung unterstützt die Grundoperatoren + , -, *, /. Alle Operanden werden zunächst in Zahlen umgewandelt. Das Ergebnis wird dann wieder in einem Stringformat gespeichert. Das Ergebnis wird, falls nicht ganzzahlig, auf 2 Dezimalstellen kaufmännisch gerundet ausgegeben; dabei können Sie eine andere Anzahl von Dezimalstellen setzen (decimals=) sowie weitere Optionen, siehe Set-Anweisung.GuiXT
Die Rechnungen erfolgen intern über doppeltgenaue Gleitpunktzahlen. Beispiel 1 GuiXT
Resultat: 0,66667 DatumsangabenBei der Umwandlung in Zahlen werden Datumsangaben wie z.B. "01.06.2014" erkannt und automatisch in Tagen berechnet. Das Ergebnis wird wieder als Datum in gleichem Format ausgegeben, falls von einem Datum Zahlen addiert oder subtrahiert wurden.Beispiel 1: GuiXT
Resultat: "31.05.2014" Beispiel 2: GuiXT
Resultat: "151" Beispiel 3: Die folgende Datumsrechnung prüft, ob ein gegebenes Datum V[date] ein Sonntag ist. Dazu wird ein beliebiger Sonntag, z.B. der 31.12.2000, von dem Datum subtrahiert und dann berechnet, ob die Differenz durch 7 teilbar ist: GuiXT
Variablen im Namen einer VariablenSie können in einem Variablennamen den Inhalt anderer Variablen verwenden. Beispiel:GuiXT
Hierdurch wird V[x] auf "10" gesetzt. Meist benutzt man diese Möglichkeit für einen fortlaufenden Index. Als Beispiel übertragen wir aus den angezeigten Zeilen einer Erfassungstabelle "Alle Positionen" die Spalte "Material" in fortlaufend nummerierte Variablen: GuiXT
Feldtexte aus dem SAP Data DictionaryMit der Notation &ddic[xxx] erhalten Sie den Feldtext zum SAP-Feld xxx in der Anmeldesprache des Benutzers. Wenn Sie eine Länge mitgeben, wird ein passender Kurztext aus dem Data Dictionary entnommen. Beispiele:
"&ddic[BSEG-BSCHL]" Buchungsschlüssel Bei Verwenden von VersionNumber werden die gelesenen Texte im GuiXT Cache (lokale Dateien) gespeichert, sodass das relativ aufwändige Lesen aus dem SAP Repository nur bei Ändern der VersionNumber anfällt. UmgebungsvariablenDen Wert einer Windows Umgebungsvariablen erhalten Sie über die Notation "&%[xxx]" wobei xxx der Name der Umgebungsvariable ist.Wenn Sie zum Beispiel eine temporäre Datei generieren wollen, kann es sinnvoll sein, den Ordner aus der Umgebungsvariable TEMP zu entnehmen: GuiXT
Struktur-/TabellenvariablenStrukturvariablen dienen dazu, zusammengehörige Daten in einer festen, übersichtlichen Form zu speichern. Sie bestehen aus vordefinierten Feldern (Komponenten), auf die gezielt zugegriffen werden kann. Dadurch eignen sie sich besonders für einzelne Datensätze mit klarer Struktur.GuiXT
Tabellenvariablen werden verwendet, um mehrere Datensätze in Form von Zeilen und Spalten zu verwalten. Jede Zeile stellt dabei einen eigenen Datensatz dar. Sie eignen sich besonders, wenn wiederkehrende oder listenartige Daten verarbeitet werden sollen. GuiXT
Eine genauere Erläuterung finden Sie hier. |