Funktion Die VB.NET Klassenbibliothek  guinet.dll bietet eine komfortable Möglichkeit, die SAP GUI Scripting Funktionen aus VB.NET heraus zu benutzen.

Dabei kann es sich um VB.NET Funktionen handeln, die Sie aus GuiXT mit  CallVBAsync aufrufen (Komponente GuiXT Controls) oder um eigene VB.NET Programme, die unabhängig von GuiXT aufgerufen werden. Auch die mobilen Anwendungen von Synactive (S10 Technologie, CIS mobile) verwenden guinet.dll.

Die über guinet.dll ausgelösten Aktionen werden im GuiXT InputScript Trace protokolliert.

Voraussetzung:

  • SAP GUI Scripting ist auf dem SAP Server und auf dem PC aktiviert
     
  • Die Schnittstellenbibliothek Interop.SAPFEWSELib.dll liegt in dem VBDirectory-Verzeichnis. Sie wird wird automatisch von Visual Studio generiert, wenn Sie in Ihrem Visual Studio Projekt eine Referenz auf das COM-Objekt "SAP GUI Scripting API" aufnehmen

    Bitte beachten Sie, die Referenz erst dann aufzunehmen, wenn in Ihrem Visual Studio Projekt das .NET Target Framework 4.0 gesetzt ist. Wenn Sie mit Target 3.5 oder darunter die Datei Interop.SAPFEWSELib.dll generieren und in das VBDirectory-Verzeichnis kopieren, gibt es eine Unverträglichkeit mit guinet.dll.
Aufruf der
Scripting-Funktionen
Zum Aufruf der Scripting-Funktionen verwenden Sie das Objekt guinet.GuiSession. Das Scripting arbeitet automatisch mit der SAP GUI Session, aus der Sie mit CallVBAsync gestartet sind.

Bei Verwendung der guinet.dll in einem eigenen VB Programm, unabhängig von GuiXT CallVBAsync, ist es nötig, zunächst mit GuiSession.Logon() eine SAP GUI Session zu starten.

Beispiel 1:

' start transaction FB01
Dim guixt As New guinet.guixt

guixt.GuiSession.Enter("/NFB01")

' set company code

guixt.GuiSession.SetField("BKPF-BUKRS", "0001")

Beispiel 2:

Eine etwas ausführlichere Beispielanwendung als VB.NET Projekt finden Sie hier:

GuiNET Demo

Aufruf von
"native" SAP GUI Scripting
Falls Sie neben den Funktionen aus guinet.dll noch "native" SAP GUI Scripting Funktionen in Ihrer VB.NET Routine benötigen sollten, können Sie diese über guixt.GuiSession.GuiApplication und guixt.GuiSession.GuiActiveWindow erreichen.

Beispiel 1:
MsgBox("SAP GUI Version: " & guixt.GuiSession.GuiApplication.MajorVersion)

Beispiel 2:
guixt.GuiSession.GuiActiveWindow.FindById("usr/ctxtBKPF-BUKRS").text = "0001"

Die Notation des native SAP GUI Scripting spiegelt die interne Subscreen-Struktur eines SAP Dynpros wieder und ist deshalb in der Praxis nur durch Aufzeichnung eines Scripts zu benutzen.  Zum Beispiel vereinfacht sich die SAP GUI Scripting Standardnotation in Transaktion VA01

guixt.GuiSession.GuiActiveWindow .findById("usr/subSUBSCREEN_HEADER:SAPMV45A:4021/subPART-SUB:SAPMV45A:4701/ctxtKUWEV-KUNNR").text = mykunnr

mit der guinet-Schnittstelle zu

guixt.GuiSession.SetField("KUWEV-KUNNR", mykunnr)

was man auch ohne Aufzeichnung schreiben kann, wenn man den technischen Feldnamen "KUWEV-KUNNR" kennt (z.B. über F1 auf SAP-Feld).

Die SAP Standardhilfe zum SAP GUI Scripting mit Beschreibung aller "native" Funktionen ist in SAP GUI über den Menüpunkt "Hilfe zu SAP GUI Scripting" verfügbar.

Click() Public Sub Click(ByVal name As String)

Mausklick (einfach) auf das angegebene Element (z.B. Ein/Ausgabefeld). Unter "name" geben Sie den technischen Namen des Elements an.

Beispiel:

' click on Ship-to party
guixt.guisession.Click(
"
KUWEV-KUNNR")

ClickGridCell() Public Sub ClickGridCell(ByVal row As Integer, ByVal colname As String, Optional ByVal index As Integer = 0)

Mausklick auf eine Zelle in einem Grid Control.

ClickTableCell() Public Sub ClickTableCell(ByVal row As Integer, ByVal colname As String)

Public Sub ClickTableCell(ByVal tabname As String, ByVal row As Integer, ByVal colname As String)

Mausklick auf eine Zelle in einem Table Control. Mit der ersten Variante können Sie arbeiten, falls nur eine Tabelle in dem Screen existiert.

DoubleClick() Public Sub DoubleClick(ByVal name As String)

Doppelklick auf das angegebene Element (z.B. Ein/Ausgabefeld). Unter "name" geben Sie den technischen Namen des Elements an.

Beispiel:

' doubleclick on Ship-to party
guixt.guisession.DoubleClick(
"
KUWEV-KUNNR")

DoubleClick
GridCell()
Public Sub ClickGridCell(ByVal row As Integer, ByVal colname As String, Optional ByVal index As Integer = 0)

Doppelklick auf eine Zelle in einem Grid Control.

DoubleClick
TableCell()
Public Sub DoubleClickTableCell(ByVal row As Integer, ByVal colname As String)

Public Sub DoubleClickTableCell(ByVal tabname As String, ByVal row As Integer, ByVal colname As String)

Doppelklick in einer Zelle in einem Table Control. Mit der ersten Variante können Sie arbeiten, falls nur eine Tabelle in dem Screen existiert.

DoubleClick
TreeNode()
Public Sub DoubleClickTreeNode(ByVal nodekey As String, Optional ByVal index As Integer = 0)

Doppelklick auf einen Baumknoten (Schlüssel).

 

DoubleClick
TreeItem()
Public Sub DoubleClickTreeItem(ByVal nodekey As String, ByVal item As String, Optional ByVal index As Integer = 0)

Doppelklick auf ein Element des Baums.

 

Enter() Public Function Enter(Optional ByVal cmd As String = "", Optional ByVal IgnoreWarning As Boolean = True, Optional ByVal ReturnError As Boolean = False, Optional ByVal IgnoreInfoPopup As Boolean = False, Optional ByRef msg As String = "") As Boolean

Eingabe eines Funktionscodes, z.B.

guixt.guisession.Enter("=V43D_GET")

oder

guixt.guisession.Enter("/NVA03")

Über die Zusatzoptionen können Sie festlegen, ob  Meldungen und Popups automatisch quittiert werden sollen.

FindField() Public Function FindField(ByVal name As String) As GuiComponent

Sucht ein Element über den technischen Namen und liefert es als  GuiComponent Objekt des SAP GUI Scripting zurück. Falls nicht gefunden: Nothing.

GetField() Public Function GetField(ByVal name As String, Optional ByVal text As Boolean = False) As String

Der Inhalt eines Ein- oder Ausgabefeldes, einer Checkbox, eines Radiobuttons oder einer Combobox. Als "name" nennen Sie den technischen Namen. Beispiel:

vbapnetwr = guixt.guisession.GetField("VBAP-NETWR")

  • Bei Checkbox und Radiobutton wird "" oder "X" zurückgeliefert
  • Bei einer Combobox erhalten Sie den Schlüsselwert, es sei denn Sie geben in dem optionalen Parameter "text" True mit, dann wird der Text statt des Schlüsselwertes geliefert.
     
GetFieldIcon() Public Function GetFieldIcon(ByVal name As String) As String

Sucht ein Element über den technischen Namen und liefert den Namen des Icons zurück, falls der Text mit einem Icon beginnt, sonst "".

GetGridCell() Public Function GetGridCell(ByVal row As Integer, ByVal colname As String, Optional ByVal index As Integer = 0, Optional ByRef found As Boolean = False) As String

Liest den Inhalt einer Zelle in einem Grid Control.

GetTableCell() Public Function GetTableCell(ByVal row As Integer, ByVal colname As String) As String

Public Function GetTableCell(ByVal tabname As String, ByVal row As Integer, ByVal colname As String) As String

Liest den Inhalt einer Zelle in einem Table Control. Mit der ersten Variante können Sie arbeiten, falls nur eine Tabelle in dem Screen existiert.

GuiGridView() Public ReadOnly Property GuiGridView() As GuiGridView

Liefert das aktuelle Grid Control als GuiGridView Objekt des SAP GUI Scripting, oder Nothing falls kein Grid aktiv ist. Falls mehrere Grid Controls existieren: das erste.

 

GuiGridViews() Public ReadOnly Property GuiGridViews() As List(Of GuiGridView)

Liefert eine Liste aller aktuellen Grid Controls. 

 

GuiTable
Control()
Public ReadOnly Property GuiTableControl() As GuiTableControl

Liefert das aktuelle Table Control als GuiTableControl Objekt des SAP GUI Scripting, oder Nothing falls kein Table Control aktiv ist.

Optional kann der technische Name der Tabelle genannt werden, z.B.

Dim tc As GuiTableControl
tc = guixt.guisession.GuiTableControl("SAPMV45A_TCTRL_U_ERF_AUFTRAG")

GuiTree() Public ReadOnly Property GuiTree() As GuiTree

Liefert den aktuellen Tree als GuiTree Objekt des SAP GUI Scripting, oder Nothing falls kein Tree aktiv ist. Falls mehrere Trees existieren: den ersten.

 

GuiTrees() Public ReadOnly Property GuiTrees() As List(Of GuiTrees)

Liefert eine Liste aller aktuellen Trees. 

 

IsTabActive() Public ReadOnly Property IsTabActive(ByVal tabid As String) As Boolean

Prüft, ob ein bestimmter Reiter aktiv ist. Beispiel:

If guixt.guisession.IsTabActive("T/03")

Endif

Logoff() Public Function Logoff() As Boolean

Die SAP GUI Session wird beendet.

Logon() Public Function Logon(Optional ByRef ParErrorMessage As String = Nothing, Optional ByVal HideWindow As Boolean = False) As Boolean

Nur nötig, falls Sie ohne GuiXT-Bezug arbeiten, denn mit GuiXT bezieht sich das GUI Scripting immer auf das aktuelle SAP GUI Window.

Führt die Anmeldung im SAP System mit den bei Anlegen des sapguisession-Objekts gesetzen Daten durch (Connection string, Benutzername etc.).

Optional kann über den Parameter HideWindow das SAP GUI Fenster unsichtbar geschaltet werden, sodass nur die Oberfläche Ihres VB.NET-Programms für den Benutzer sichtbar ist und alle SAP GUI Aktionen im Hintergrund erfolgen.

MessageId() Public ReadOnly Property MessageId() As String

Die Nachrichtenklasse, z.B. "02".

Message
Number()
Public ReadOnly Property MessageNumber() As String

Die Nachrichtennummer, z.B. "100".

Message
Parameter1()
Public ReadOnly Property MessageParameter1Id() As String

Parameter 1 in der Nachricht

Message
Parameter2()
Public ReadOnly Property MessageParameter1Id() As String

Parameter 2 in der Nachricht

Message
Parameter3()
Public ReadOnly Property MessageParameter1Id() As String

Parameter 3 in der Nachricht

Message
Parameter4()
Public ReadOnly Property MessageParameter1Id() As String

Parameter 4 in der Nachricht

MessageText() Public ReadOnly Property MessageText() As String

Der Nachrichtentext.

MessageType() Public ReadOnly Property MessageType() As String

Falls eine Nachricht auf dem aktuellen Screen ausgegeben wird, den Nachrichtentype "E" für Error, "I" für Information, "W" für Warning. Andernfalls "".

New() Public Sub New(ByVal ConnectionString As String, ByVal LogonClient As String,
ByVal
LogonUser As String, ByVal LogonPassword As String, ByVal LogonLanguage As String
)

Nur nötig, falls Sie ohne GuiXT-Bezug arbeiten, denn mit GuiXT bezieht sich das GUI Scripting immer auf das aktuelle SAP GUI Window und Sie erhalten das sapguisession-Objekt durch den Aufruf guixt.sapguisession().

Legt ein Objekt der Klasse guinet.sapguisession mit den Parametern für den nachfolgenden Logon() an.
 

NewSession() Public Function NewSession(ByVal tcode As String) As sapguisession

Startet einen neuen SAP GUI Modus mit der angegebenen Transaktion

ReadGrid() Public Function ReadGrid(ByVal dt As DataTable, Optional ByVal index As Integer = 0) As Boolean

Einlesen der Inhalte des aktuellen Grid Control in ein VB.NET Objekt der Klasse System.Data.DataTable.

Es werden die Spalten gelesen, für die in der DataTable gleichnamige Spalten existieren.

Sollte mehr als ein Grid Control in dem Screen existieren, können Sie die Nummer als Index mitgeben.

ReadCombo
Box()
Public Function ReadComboBox(ByVal dt As DataTable, ByVal name As String) As Boolean

Einlesen der Inhalte einer Combobox in ein VB.NET Objekt der Klasse System.Data.DataTable.

Die Schlüssel werden in die erste Spalte eingelesen, die Texte in die zweite Spalte.

ReadTable() Public Function ReadTable(ByVal dt As DataTable, Optional ByVal tabname As String = "") As Boolean

Einlesen der Inhalte eines Table Control in ein VB.NET Objekt der Klasse System.Data.DataTable.

Es werden die Spalten gelesen, für die in der DataTable gleichnamige Spalten existieren.

Als "tabname" können Sie den technischen Namen der Tabelle angeben.

ReadTree() Public Function ReadTree(ByVal dt As DataTable, Optional ByVal nodekey As String = "", Optional ByVal index As Integer = 0, Optional ByVal depth As Integer = 100000) As Boolean

Einlesen der Inhalte eines Tree in VB.NET Objekt der Klasse System.Data.DataTable.

Folgende Spalten werden gefüllt, falls sie in der DataTable existieren:

  • nodekey
  • nodepath
  • nodetext
  • nodelevel
  • nodelabel

Optional können Sie mitgeben, ab welchem Knoten "nodekey" ein Teilbaum gelesen werden soll, den Index 0,1,2 falls es mehrere Trees gibt, und die Tiefe bis zu der die Baumstruktur aufgelöst werden soll.

ScreenId() Public ReadOnly Property ScreenId() As String

Liefert den aktuellen Programmnamen und Dynpronummer, z.B. "SAPMV45A.0100"

 

ScreenTitle() Public ReadOnly Property ScreenTitle() As String

Liefert den aktuellen Titel, z.B. "Kundenauftrag anlegen: Einstieg"

 

SetField() Public Sub SetField(ByVal name As String, ByVal value As String)

Setzt den Inhalt eines Eingabefeldes, einer Checkbox, eines Radiobuttons oder einer Combobox. Als "name" nennen Sie den technischen Namen. Beispiel:

guixt.guisession.SetField("RF02D-KUNNR", customernumber)

  • Bei Checkbox und Radiobutton kann nur "" oder "X" gesetzt werden
  • Bei einer Combobox setzen Sie den Schlüsselwert, nicht den Text
     
SetLicense() Public Function SetLicense(ByVal license As String) As Boolean

Falls Sie guinet.dll in einem eigenen VB.NET Programm ohne GuiXT-Bezug verwenden, müssen Sie vor dem Logon einen gültigen Lizenzschlüssel setzen. Die "GuiXT Controls" Komponente umfaßt bereits diese Lizenz; den Lizenzschlüssel erhalten Sie von Synactive.

SetGridCell() Public Sub SetGridCell(ByVal row As Integer, ByVal colname As String, ByVal value As String, Optional ByVal index As Integer = 0)

Setzt den Inhalt einer Zelle in einem Grid Control.

SetTableCell() Public Sub SetTableCell(ByVal row As Integer, ByVal colname As String, ByVal value As String)

Public Sub SetTableCell(ByVal tabname As String, ByVal row As Integer, ByVal colname As String, ByVal value As String)

Setzt den Inhalt einer Zelle in einem Table Control. Mit der ersten Variante können Sie arbeiten, falls nur eine Tabelle in dem Screen existiert.

SelectTable
Row()
Public Sub SelectTableRow(ByVal row As Integer)

Public Sub SelectTableRow(ByVal tabname As String, ByVal row As Integer)

Selektiert eine Tabellenzeile. Mit der ersten Variante können Sie arbeiten, falls nur eine Tabelle in dem Screen existiert.

Die Tabellenzeile wird, falls erforderlich, in den sichtbaren Ausschnitt der Tabelle gescrollt.

TableCell
Exists()
Public Function TableCellExists(ByVal row As Integer, ByVal colname As String, Optional ByRef g As GuiComponent = Nothing) As Boolean

Public Function TableCellExists(ByVal tabname As String, ByVal row As Integer, ByVal colname As String, Optional ByRef g As GuiComponent = Nothing) As Boolean

Prüft, ob eine bestimmte Tabellenzelle existiert. Optional wird die Tabellenzelle als Objekt der Klasse GuiComponent zur Verfügung gestellt.

Die angegebene Tabellenzeile wird, falls erforderlich, in den sichtbaren Ausschnitt der Tabelle gescrollt.

Komponente GuiXT + Controls