Ich hoffe jemand kann das Nachfolgende brauchen
Wenn jemand einen Fehler findet oder Verbesserungsvorschläge hat, immer her damit.
Inhalt
1. Grundsätzliches
2. Initialisierung des SAP-Objects
3. Anmeldung am SAP-System
4. SAP-Baustein initialisieren
5. Übergabe von Werten
6. verschiedene Arten von Bausteinen
6.1 Rückgabewerte über Export-Parameter
6.2 Rückgabewerte über Tabelle(n)
6.3 RFC_Read_Table1. GrundsätzlichesVoraussetzung für nachfolgende Skripte ist eine installierte SAP-GUI Version 7.20 Patch 2 oder höher. (zumindest für Unicode-Systeme)
Getestet wurde alles mit Notes 9.0.1 FP2 und SAP-GUI 7.30 Patch 9.
SAP-GUI 7.40 enthält aktuell noch Fehler, wodurch einige RFC-Calls nicht sauber funktionieren!
2. Initialisierung des SAP-Objects Dim FunctionCtrl As Variant
Dim SAPConnection As Variant
Set FunctionCtrl = CreateObject("SAP.Functions.Unicode")
Set SAPConnection = FunctionCtrl.Connection
3. Anmeldung am SAP-System SAPConnection.Client = "010" 'Mandant
SAPConnection.User = "BENUTZER" 'Benutzername GROß
SAPConnection.Password = "Passwort" 'Passwort
SAPConnection.Language = "DE" 'Sprache
SAPConnection.HostName = "10.1.100.200" 'IP
SAPConnection.SystemNumber = "80" 'System Nummer
SAPConnection.System = "P01" 'SID
SAPConnection.UseSAPRFCIni = False
If Not SAPConnection.logon(0, True) Then
MsgBox("Anmeldung fehlgeschlagen")
Else
MsgBox("Anmeldung OK")
End If
4. Remote-Baustein initialisierenDer SAP-Baustein muss Remote-fähig sein!
Dim rfc As Variant
Set rfc = FunctionCtrl.Add("RFC_SYSTEM_INFO")
5. Übergabe von Werten Dim rfcExport As Variant
rfc.exports("I_MATNR") = "00324188"
rfc.exports("I_WERKS") = "1000"
rfc.exports("I_LGORT") = "340L"
6. verschiedene Arten von Bausteinen Mir sind bisher drei Arten von Bausteinen über den Weg gelaufen:
- Rückgabewerte sind Export-Parameter
- Rückgabewerte sind Tabellen
- Spezialfall RFC_Read_Table
6.1 Rückgabewerte über Export-ParameterFolgender Code zeigt ein Beispiel am Baustein RFC_SYSTEM_INFO, welches über Export Parameter die System-Infos zurückliefert.
'Zuweisung des Export-Felds aus SAP in Import-Variable
Set rfcExport = rfc.Imports("RFCSI_EXPORT")
'Zusätzliches Export Feld Current_Resources
Dim rfcExport2 As Varaint
Set rfcExport2 = rfc.Imports("CURRENT_RESOURCES")
'Baustein ausführen
If rfc.call = False Then
MsgBox("Fehler beim rfc-Call")
Exit Sub
Else
'Wenn Export-Paramter in mehrere Werte unterteilt ist, wie bei RFCSI_EXPORT (rfcExport)
MsgBox(rfcExport.value("RFCDEST"))
'Wenn Export-Parameter ein einzelner Wert ist -> rfcExport2
MsgBox(rfcExport2.value)
End If
6.2 Rückgabewerte über Tabelle(n)Beispiel mit Baustein BAPI_USER_GETLIST und Tabelle USERLIST
Set rfc = FunctionCtrl.Add("BAPI_USER_GETLIST")
'Rückgabe-Tabelle
Set rfcExport = rfc.Tables("USERLIST")
'RFC aufrufen
If Not rfc.Call() Then
Error 1000, rfc.Exception
End If
'Überprüfen, ob Werte zurückgeliefert wurden
If (rfcExport.RowCount = 0) Then
MsgBox "No records returned by ECC"
Exit Sub
End If
'Tabelle Loopen und zwei Werte auslesen
Dim index As Long
index = 0
Do While index < 2
index = index + 1
MsgBox(rfcExport(index,"USERNAME"))
Loop
6.3 RFC_Read_TableMit diesem Baustein können beliebige Tabellen ausgelesen werden. Übergeben werden muss die Tabelle und ein Trennzeichen.
Außerdem müssen im Vorfeld die Rückgabe-Tabellen definiert werden.
OPTIONS beschreibt ein SELECT-Statement
FIELDS beschreibt die Übergabe-Felder
DATA enthält die Datensätze
Beispiel mit Tabelle QALS (Prüflose)
Set rfc = FunctionCtrl.Add("RFC_READ_TABLE")
'Übergabe-Parameter
rfc.exports("QUERY_TABLE") = "QALS"
rfc.exports("DELIMITER") = "~"
'Tabellen initialisieren
Dim tblData As Variant
Dim tblOptions As Variant
Dim tblFields As Variant
Set tblFields = rfc.Tables("FIELDS")
Set tblData = rfc.Tables("DATA")
Set tblOptions = rfc.Tables("OPTIONS")
'Tabelle FIELDS definieren
tblFields.AppendRow
tblFields.Value(1, "FIELDNAME") = "PRUEFLOS"
tblFields.AppendRow
tblFields.Value(2, "FIELDNAME") = "WERK"
'RFC aufrufen
If Not rfc.Call() Then
Error 1000, rfc.Exception
End If
If (tblData.RowCount = 0) Then
MsgBox "No records returned by ECC"
Exit Sub
End If
'Die MsgBox gibt nun den Datensatz bei Index x zurück
'Die Werte der Spalten sind durch das vorher definierte Trennzeichen getrennt. „WA“ ist die (einzige) Spalte der Tabelle DATA
Dim index As Long
index = 0
Do While index < 2
index = index + 1
MsgBox(tblData.Value(index,"WA"))
Loop