Funktion | Mit der
CallVB-Anweisung
können Sie aus einem GuiXT Script oder InputScript eine in VB.NET oder
einer anderen .NET-Sprache implementierte Funktion aufrufen. Die
aufgerufene Funktion kann
Die .NET Klassenbibliothek (dll) kann lokal oder zentral, z.B. im SAP Web Repository oder SAP Mime Repository, zur Verfügung gestellt werden. Voraussetzungen:
|
Beispiel |
CallVB
msg =
utilities.email.send Die .NET Klassenbibliothek "utilities.dll" wird aus dem im GuiXT Profile angegebenen Verzeichnis ".NET class libraries", guixt.ini-Parameter VBDirectory, geladen. Es wird pro SAP GUI -Modus ein Objekt der angegebenen Klasse "email" aus "utilities.dll" angelegt. Die Funktion "send" des Objekts wird aufgerufen und ihr Rückgabewert in V[msg] gespeichert. |
Format 1 |
CallVB
progname.classname.funcname
"par1" "par2 "par2" ... Die Funktion funcname eines pro SAP GUI Modus angelegten Objekts der Klasse classname (Klassenbibliothek progname.dll) wird aufgerufen. Die angegebenen Strings "par1", "par2",... werden an die Funktion als Parameter übergeben (Wertübergabe). Statt der Übergabe als Positionsparameter können Sie auch den in VB definierten Parameternamen angeben. Beispiel:
CallVB
utilities.email.send
emailaddr:="&V[email]" cc:="&V[cclist]" subject:="&V[subject]" body:="&V[mytext]" |
Format 2 |
CallVB
varname
=
progname.classname.funcname "par1" "par2 "par2"
Die Funktion
funcname
eines pro SAP GUI Modus angelegten Objekts der Klasse
classname
(Klassenbibliothek
progname.dll)
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. |
Details zum Ablauf |
Bei der ersten Ausführung einer
CallVB-Anweisung
für eine Klassenbibliothek "progname.dll"
wird diese in die VB.NET Laufzeitumgebung geladen. Dazu wird sie, falls
SAP Web Repository oder SAP Mime Repository im Profile als VBDirectory
angegeben sind, von dort zunächst in das lokale GuiXT-Cache-Verzeichnis
kopiert.
Falls Sie das SAP Web Repository oder SAP Mime Repository verwenden, bitte mit VersionNumber arbeiten. Ebenfalls kopiert wird, falls erforderlich, die Schnittstellenbibliothek guinet.dll. Als nächstes wird pro SAP GUI Modus genau ein Objekt der Klasse classname angelegt und die Funktion funcname des Objekts aufgerufen. Die Parameterübergabe an die Funktion erfolgt als Wertübergabe von Strings, ebenso wird der Rückgabewert als String in die angegebene GuiXT-Variable gestellt. Einzige Ausnahme: siehe den nachfolgenden Abschnitt über Objektreferenzen. In der VB-Funktion können
Sie lesend und schreibend auf GuiXT Variablen und Langtextvariablen
zugreifen, siehe Klasse "guixt"
in VB. Damit können Sie eine Referenzübergabe einer Variablen
dadurch realisieren, dass Sie statt eines Wertes den Namen der Variablen
an die VB-Funktion übergeben und dort mit guixt.GetVariable() und guixt.SetVariable()
arbeiten. |
Objektreferenzen |
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 VB eine Klasse definieren,
in einer VB 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.
Beispiel: In der VB.NET-Funktion "newcustomer" legen Sie ein Objekt der von Ihnen definierten Klasse "customer" an, setzen ein Attribut ("name") und geben die Objektreferenz an GuiXT zurück: Public Function newcustomer() As customer Dim c As New customerc.name = "abc GmbH" Return c End FunctionIm einer zweiten Funktion erwarten Sie als Parameter ein Objekt der Klasse "customer" und liefern den Namen zurück: Public Function customername(ByVal cust As customer) As String Return cust.name End FunctionIn GuiXT rufen Sie die erste Funktion auf und stellen das Ergebnis in eine Variable. Später können Sie dann die zweite Funktion aufrufen und den Inhalt der Variablen als Objektreferenz übergeben: CallVB c1 = mylib.class1.newcustomer ... CallVB name = mylib.class1.customername "&V[c1]"
|
Debugging | Sie können
mit einer "Stop" Anweisung in der VB.NET Funktion den Debugger
(Visual Studio) aktivieren. Alternativ können Sie auch in Visual Studio über "Debug -> Attach to process" dynamisch den Debugger für eine laufende SAP GUI Session aktivieren. Dabei als Prozess "saplogon.exe" angeben. |
Beispiel 2 | Wir starten
Excel mit einigen Demowerten:
// GuiXT Script 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
In VB.NET nehmen wir in unserem Projekt am besten eine Referenz auf "Microsoft.Office.Interop.Excel" auf, damit wir typisiert (statt nur mit "Object") arbeiten können.
' VB Dim oXL As
Excel.Application oXL = CreateObject("Excel.Application") oWB = oXL.Workbooks.Add() oSheet.Cells(k, 1).Value = guixt.GetVariable("region." & k) oSheet.Cells(k, 2).Value = guixt.GetVariable("sales." & k) Next Return oXL End Function |
Komponente | GuiXT + Controls |