Notation
Eine Scriptvariable wird mit V[varname] bezeichnet, wobei varname ein frei wählbarer Name ist. Für den Namen gilt:

  • Nur Buchstaben, Ziffern und den Unterstrich "_" oder Bindestrich "-" verwenden und mit einem Buchstaben oder einer Ziffer beginnen lassen
  • Der Variablennamen unterscheidet Gross- und Kleinbuchstaben, d.h. V[X8] ist ungleich V[x8]

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:
V[PreviousAccount]. Es ist günstig, alle zu einer bestimmten Transaktion gehörenden Variablen mit dem Transaktionscode oder einer entsprechenden Kennung für mehrere Transaktionen beginnen zu lassen, z.B. V[VA01_PreviousAccount] oder [VA_PreviousAccount].

Inhalt der Variablen
Der 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. Die Maximallänge der Strings intern ist 4000 Byte. Falls längere Zeichenreihen benötigt werden, bitte Langtextvariablen (siehe CopyText-Anweisung) benutzen.

Systemvariablen
Einige Variablen sind schon systemseitig vordefiniert. Ihr Name beginnt mit einem Unterstrich gefolgt von Kleinbuchstaben. Beispiele:

V[_user]
V[_client]
V[_transaction]
V[_host]
V[_database]

Sie finden eine ausführliche Liste der Systemvariablen in der Dokumentation: Systemvariablen.

Gültigkeit
Die 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".

Variablen zuweisen
Durch "Set" weisen Sie einer Variable einen Wert zu. Beispiel:

Set V[MM_init] "X"

Um einer Variablen den Wert einer anderen Variablen zuzuweisen, arbeiten Sie mit der &V[...]-Notation. Beispiel:

Set V[MM_nr2]   "&V[MM_nr1]"

Die Schreibweise

Set V[MM_nr2]  &V[MM_nr1]    // !! nicht empfehlenswert !!

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.

Set V[i] 1
...
Set V[i] &V[i] + 1

Wert einer Variablen abfragen
Mit "if" können Sie abfragen, ob eine Variable einen bestimmten Wert hat. Beispiel:

if V[MM_init=X]
  
....
endif

Vorsicht: Die Gleichheit wird hier sehr locker interpretiert :

  • Gross-/Kleinschreibung wird ignoriert
  • Ein Wert der nur aus Nullen "0000" besteht wird wie eine leere Zeichenreihe behandelt

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:

if V[FI_mwskz=V0]  -strict
  ...
endif

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:

if V[k<100]
  ...
endif

Kurzform für Abfrage, ob Variable nicht leer ist
Für die häufig vorkommende Abfrage, ob eine Variable nicht leer ist, können Sie die Notation

if V[varname]
  
....
endif

verwenden.

Zwei Variablen vergleichen
Zum Vergleich zweier Variablen verwenden Sie statt eines festen Vergleichswerts den Ausdruck &V[varname]. Beispiel:

if V[konto1=&V[konto2]]
  ...
endif

Bitte beachten: zwei schliessende Klammen am Ende und keine "..." verwenden.

Generisches Rücksetzen einer Menge von Variablen
Wenn 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:

if not V[_transactionid=&V[MM_transactionid]]

  Set V[MM_*] ""
  Set V[MM_transactionid] "&V[_transactionid]"

endif 

Variablen konkatenieren
Bei "Set" und jeder anderen Anweisung können Sie mehrere Variablenwerte durch Hintereinanderschreiben zusammenfügen. Beispiel:

Set V[MM01_text] "&V[M01_text1]&V[MM01_text2]"

Dazwischen können sich auch konstante Strings befinden. Beispiel:

Set V[id] "&V[a]-&V[b]-&V[c]"

Teilstrings abgreifen
Sie 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:

Set V[x] "00113100"
Set V[y] "&V[x](5-6)"

Jetzt hat V[y] den Wert "31". Ebenso bei

Set V[x] "00113100"
Set V[y] "&V[x](5,6)"

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:

Set V[x] "München"
Set V[y] "&V[x](4-6)"

Jetzt hat V[y] den Wert "nch". Dagegen bei 

Set V[x] "München"
Set V[y] "&V[x](4,6)"

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

Set V[leng] "München" -stringLength

Set V[count] "München" -charCount

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 Positionen
Die Positionsangaben für Teilstrings können variable 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.

// zum Testen
Set V[in] "12.580.720.4"

Set V[out] ""
Set V[charcount] "&V[in]" -charCount
Set V[k] 1

label next_char

if V[k>&V[charcount]]
  goto done
endif

Set V[char] "&V[in](&V[k],&V[k])"

if not V[char=.]
  Set V[out] "&V[out]&V[char]"
endif

Set V[k] &V[k] + 1

goto next_char
 

Komponenten aus SAP-Strukturen abgreifen
Beim 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:

Call "BAPI_CUSTOMER_GETDETAIL2" in.CUSTOMERNO="0000002000" out.CUSTOMERADDRESS="addr"
Set V[city] "&V[addr](BAPICUSTOMER_04-CITY)"

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.

Komponenten in SAP Strukturen setzen
Analog 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.

Set V[line](BAPICUSTOMER_IDRANGE-SIGN) "I"
Set V[line](BAPICUSTOMER_IDRANGE-OPTION) "BT"
Set V[line](BAPICUSTOMER_IDRANGE-LOW) "0000000001"
Set V[line](BAPICUSTOMER_IDRANGE-HIGH) "0000000050"

CopyText fromString="line" toText="idrange"

Call "BAPI_CUSTOMER_GETLIST" table.IDRANGE="idrange" table.ADDRESSDATA="adrtab"

Berechnungen
Die 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.

Set V[meineVariable] Wert1 + Wert2
Set V[meineVariable] Wert1 - Wert2
Set V[meineVariable] Wert1 * Wert2
Set V[meineVariable] Wert1 / Wert2

Die Rechnungen erfolgen intern über doppeltgenaue Gleitpunktzahlen.

Beispiel 1

Set V[x]  2  /  3 decimals=5

Resultat: 0,66667

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

Set V[x]  "01.06.2014" - 1

Resultat: "31.05.2014"

Beispiel 2:

Set V[x]  "01.06.2014" -  "01.01.2014"

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:

Set V[x] "&V[date]" - "31.12.2000"
Set V[y] &V[x] / 7 decimals=0
Set V[y] &V[y] * 7

if V[x=&V[y]]
  Message "Sonntag"
endif
 

Variablen im Namen einer Variablen
Sie können in einem Variablennamen den Inhalt anderer Variablen verwenden. Beispiel:

Set V[name] "x"
Set V[&V[name]] "10"

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:

Set V[i] 1

label start

Set V[VA_material_&V[i]]  "&cell[Alle Positionen,Material,&V[i]]"
if not V[VA_material_&V[i]]
  goto end
endif


Set V[i] &V[i] + 1
goto start

label end

Feldtexte aus dem SAP Data Dictionary
Mit 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
"&ddic[BSEG-BSCHL] (1-15)"   Buchungsschl.
"&ddic[BSEG-BSCHL] (1-10)"   Bschl

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.

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

Set V[myFilename] "&%[TEMP]\guixtva01.txt"