Funktion Mit der CallVBS-Anweisung können Sie eine VBScript-Funktion aufrufen.

Voraussetzung: Komponente "GuiXT Controls" ist aktiv.

Im 64-bit SAP GUI sind CallVBS und CallVBSAsyync nicht automatisch verfügbar, da Microsoft keine 64-bit Version des Script Controls zur Verfügung stellt, das GuiXT zur VBScript-Ausführung nutzt. Sie können bei Bedarf Alternativen wie das "Tablacus Script Control 64" installieren. CallVBS / CallVBAsync funktionieren dann wieder, ohne dass Anpassungen im GuiXT Profile oder im Script nötig sind. Alternativ, insbesondere für Neuentwicklungen, JavaScript (CallJS) oder VB.NET/C# (CallVB) verwenden.

Beispiel CallVBS msg = test1

Die VBScript-Funktion "test1" wird aufgerufen. Das Ergebnis der Funktion wird als String in die Variable V[msg] gestellt.

Format 1 CallVBS  funcname "par1" "par2 "par2" ...

Die VBScript Funktion "funcname" wird aufgerufen. Die angegebenen Strings "par1", "par2",... werden an die Funktion als Parameter übergeben (Wertübergabe). Über die Notation "&V[varname]" als Parameter können Sie dabei den Inhalt von Scriptvariablen übergeben.

Format 2 CallVBS  varname = funcname "par1" "par2 "par2"

Die VBScript Funktion "funcname" wird aufgerufen. Die angegebenen Strings "par1", "par2",... werden an die Funktion als Parameter übergeben (Wertübergabe). Das Resultat der Funktion wird in einen String umgewandelt und in die Variable V[varname] gestellt.

Sicherheit VBScript ist in ähnlicher Weise wie z.B. Visual Basic, Java oder C++ in der Lage, auf einem PC Schaden anzurichten, zum Beispiel Dateien zu löschen oder Registry-Werte zu ändern. Deshalb sind vor der Verteilung von VBScript-Dateien im Prinzip die gleichen Anforderungen an Test und Qualitätskontrolle zu stellen wie an direkt ausführbare Programme anderer Programmiersprachen.
Details zum Ablauf

Bei der ersten Ausführung einer CallVBS-Anweisung pro SAP GUI Modus werden alle im GuiXT Profile angegebenen VBScript Bibliotheken (.vbs Dateien) geladen. Die Funktionsnamen und globalen Variablen müssen über alle angegebenen Dateien hinweg eindeutig sein, da beim Laden der Dateien nur ein einziger globaler Namensraum verwendet wird. Anweisungen in den VBScript-Dateien, die sich ausserhalb von Funktionen befinden, werden beim Laden sofort ausgeführt. Globale VBScript Variablen behalten innerhalb eines SAP GUI Modus ihren Wert.

Sie können die VBScript-Dateien im SAP Web Repository ablegen und zentral pflegen, was die Qualitätskontrolle erleichtert. In der Konfigurationsdatei "guixt.ini" werden durch die folgenden Anweisungen drei VBScript Dateien aus dem SAP Web Repository geladen:

VBSLibrary   SAPWR:ZGUIXT.vbslib01.vbs
VBSLibrary   SAPWR:ZGUIXT.vbslib02.vbs
VBSLibrary   SAPWR:ZGUIXT.vbslib03.vbs

Syntaxfehler in einer der VBScript Bibliotheksdateien sollte man vermeiden, da das Laden der Funktionen dann mit einer Fehlermeldung abgebrochen wird. Am besten die VBScript Funktionen in einem speziellen VBScript Editor schreiben und dort die Syntax überprüfen, in dem man die Datei testweise ausführt.

Die Parameterübergabe an die VBScript Funktion erfolgt als Wertübergabe von Strings, ebenso wird der Funktionswert der VBScript Funktion bei der Rückkehr als String in die GuiXT-Variable gestellt. Einzige Ausnahme: siehe den nachfolgenden Abschnitt über Objektreferenzen.

In der VBScript-Funktion können Sie direkt, lesend und schreibend, auf GuiXT Variablen und Langtextvariablen zugreifen, siehe Objekt "guixt" in VBScript. Damit können Sie eine Referenzübergabe einer Variablen dadurch realisieren, dass Sie statt eines Wertes den Namen der Variablen an die VBScript-Funktion übergeben und dort mit guixt.get() und guixt.set() darauf zugreifen.

Objektreferenzen VBScript ist eine objektbasierte Sprache, in der Sie Objekte dynamisch erzeugen können. Dabei kann es sich entweder um ActiveX Komponenten handeln, die Sie mit CreateObject() anlegen oder über die GuiXT Control-Anweisung erzeugen, oder um Objekte zu selbst definierten VBScript-Klassen (Class ... End Class), die Sie in VBScript mit New erzeugen.

Die Parameterübergabe von Objektreferenzen an GuiXT Variablen ist in beide Richtungen möglich. GuiXT benutzt dazu eine String-Darstellung der Objektreferenz und konvertiert automatisch zwischen der Stringdarstellung und der Objektreferenz (technisch: eine "IDispatch" Schnittstelle). Sie können also zum Beispiel in VBScript eine Klasse definieren, in einer VBScript Funktion ein Objekt der Klasse mit New anlegen und die Objektreferenz an GuiXT zurückgeben. An eine weitere VBScript-Funktion können Sie dann aus GuiXT die Objektreferenz als Parameter übergeben und in der Funktion auf Attribute und Methoden des Objekts zugreifen.

Da VBScript eine untypisierte Sprache ist, sollte man die Komplexität der VBScript Funktionen nicht zu gross werden lassen. Bei Bedarf können Sie eigene ActiveX Komponenten in einer typisierten Sprache wie Visual Basic .NET oder C# implementieren und diese in VBScript verwenden.

Debugging Sie können mit einer "Stop" Anweisung in der VBScript Funktion den Debugger aktivieren. Falls Sie nicht ein spezielles Tools wie "Microsoft Script Debugger" oder "Visual Studio" installiert haben, wird der im Internet Explorer integrierte Script Debugger aufgerufen.

Bitte beachten:

Falls Sie im Internet Explorer -> Extras -> Internet Optionen -> Erweitert das Script-Debugging ausgeschaltet haben, hält der "Stop" Befehl nicht an, sondern bricht die Verarbeitung ohne Fehlermeldung ab.

Beispiel 2 Wir starten Excel mit einigen Demowerten:

// GuiXT Script

// set some demo values
Set V[region.1] "Americas"
Set V[sales.1] "2584"
 
Set V[region.2] "Europe"
Set V[sales.2] "1228"

Set V[region.3] "Asia"
Set V[sales.3] "1628"

// call excel
CallVBS start_excel 3

 

' VB Script
Functionstart_excel(rows)

    Dim XL 
    Set XL = guixt.CreateObject("Excel.Application")
      
    XL.Visible = True
      
    XL.Workbooks.Add
            
    XL.Columns(1).ColumnWidth = 30
    XL.Columns(2).ColumnWidth = 20
        
    For k = 1to rows
        XL.Cells(k,1).Value = guixt.get("region." & k)
        XL.Cells(k,2).Value = guixt.get("sales."  & k)
    Next
        
EndFunction

Komponente GuiXT + Controls