VBA & RFC_READ_TABLE mit GUI750 SP8

Hinweise, Tips und Tricks, FAQs - keine Anfragen!!
2 Beiträge • Seite 1 von 1
2 Beiträge Seite 1 von 1

VBA & RFC_READ_TABLE mit GUI750 SP8

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Hallo.
Falls jemand weiterhin Remote mit VBA auf das SAP System zugreifen möchte, habe ich nach langem probieren eine Lösung ausgearbeitet.
1.) Verweise
VBARef.png
1.) SAP Logon Unicode Control
2.) SAP Remote Function Call Unicode Control
3.) SAP Table Factory Unicode
Befinden sich alle im Verzeichnis C:\Program Files (x86)\SAP\FrontEnd\SAPgui\Unicode\*.ocx

2.) Das VBA Module
VBARef2.txt
' Example: calling BAPI RFC_READ_TABELE
Option Explicit
Public Functions As SAPFunctionsOCX.SAPFunctions
Public TableFactory As SAPTableFactoryCtrl.SAPTableFactory

Private LogonControl As SAPLogonCtrl.SAPLogonControl
Private Connection As SAPLogonCtrl.Connection

Dim Func As SAPFunctionsOCX.Function
'Dim Bapi As SAPBAPIControlLib.SAPBusinessObject

Public TabObj As Object
Private Sub Logon()
Dim retcode As Boolean
Dim SilentLogon As Boolean

' Get SAP Objects
Set LogonControl = CreateObject("SAP.LogonControl.Unicode.1")
Set Functions = CreateObject("SAP.Functions.Unicode")
Set TableFactory = CreateObject("SAP.TableFactory.Unicode.1")

'Define Connection objetc
Set Connection = LogonControl.NewConnection

Connection.UseSAPLogonIni = True
SilentLogon = False 'True, if you want to provide Logon parameters

retcode = Connection.Logon(1, SilentLogon)

'Check return code
If retcode <> True Then
MsgBox "Logon failed"
Exit Sub
End If

'Assign connection
Functions.Connection = Connection

End Sub



Private Sub Main()
Dim ix As Long
Dim imax As Long

Dim T() As String
Dim i As Long
Dim k As Long


'Assign SAP rfc function module
Set Func = Functions.Add("RFC_READ_TABLE")
'Func.Exports("DELIMITER") = vbTab


'Import Paramteres
Dim iQuery_Table As SAPFunctionsOCX.Parameter
Dim iDelimiter As SAPFunctionsOCX.Parameter
Dim iNo_Data As SAPFunctionsOCX.Parameter
Dim iRowSkips As SAPFunctionsOCX.Parameter
Dim iRowCounts As SAPFunctionsOCX.Parameter

'Export

'Tables
Dim tOptions As SAPTableFactoryCtrl.Table
Dim tFields As SAPTableFactoryCtrl.Table
Dim tData As SAPTableFactoryCtrl.Table


'Import Parameter of rfc function module
Set iQuery_Table = Func.Exports("QUERY_TABLE")
Set iDelimiter = Func.Exports("DELIMITER")
Set iNo_Data = Func.Exports("NO_DATA")
Set iRowSkips = Func.Exports("ROWSKIPS")
Set iRowCounts = Func.Exports("ROWCOUNT")

iDelimiter.Value = vbTab

'Export Parameter of rfc function module
'not used by rfc_read_table

'Tables rfc function module
Set tFields = Func.Tables("FIELDS")
Set tOptions = Func.Tables("OPTIONS")
Set tData = Func.Tables("DATA")

'Assign values to Import parameter
iQuery_Table.Value = "T001W"

'Assign values to Import tables
tOptions.AppendRow
tOptions(1, "TEXT") = "WERKS = '8000'" 'max 72 char

tFields.AppendRow
tFields(1, "FIELDNAME") = "WERKS"

tFields.AppendRow
tFields(2, "FIELDNAME") = "NAME1"

Func.Call
Debug.Print tData.RowCount
imax = tData.RowCount
For ix = 1 To imax
Debug.Print tData(ix, 1)
i = 0
T = Split(tData(ix, 1), vbTab)
Do While i < tFields.RowCount
Debug.Print T(i)
i = i + 1
Loop
Next

'Release rfc function
Functions.RemoveAll

End Sub


Private Sub Main2()
Dim ix As Long
Dim imax As Long

Dim T() As String
Dim i As Long
Dim k As Long

'Assign SAP rfc function module
Set Func = Functions.Add("RFC_READ_TABLE")

'Func.Exports("DELIMITER") = vbTab

'Import Paramteres
Dim iQuery_Table As SAPFunctionsOCX.Parameter
Dim iDelimiter As SAPFunctionsOCX.Parameter
Dim iNo_Data As SAPFunctionsOCX.Parameter
Dim iRowSkips As SAPFunctionsOCX.Parameter
Dim iRowCounts As SAPFunctionsOCX.Parameter

'Export

'Tables
Dim tOptions As SAPTableFactoryCtrl.Table
Dim tFields As SAPTableFactoryCtrl.Table
Dim tData As SAPTableFactoryCtrl.Table


'Import Parameter of rfc function module
Set iQuery_Table = Func.Exports("QUERY_TABLE")
Set iDelimiter = Func.Exports("DELIMITER")
Set iNo_Data = Func.Exports("NO_DATA")
Set iRowSkips = Func.Exports("ROWSKIPS")
Set iRowCounts = Func.Exports("ROWCOUNT")

iDelimiter.Value = vbTab


'Export Parameter of rfc function module
'not used by rfc_read_table

'Tables rfc function module
Set tFields = Func.Tables("FIELDS")
Set tOptions = Func.Tables("OPTIONS")
Set tData = Func.Tables("DATA")

'Assign values to Import parameter
iQuery_Table.Value = "MSEG"

'Assign values to Import tables
tOptions.AppendRow
tOptions(1, "TEXT") = "MBLNR EQ '4900589198' AND MJAHR EQ '2018' AND BWART EQ '412'" 'max 72 char

tFields.AppendRow
tFields(1, "FIELDNAME") = "MBLNR"
tFields.AppendRow
tFields(2, "FIELDNAME") = "MJAHR"
tFields.AppendRow
tFields(3, "FIELDNAME") = "ZEILE"
tFields.AppendRow
tFields(4, "FIELDNAME") = "BWART"
tFields.AppendRow
tFields(5, "FIELDNAME") = "MATNR"
tFields.AppendRow
tFields(6, "FIELDNAME") = "WERKS"
tFields.AppendRow
tFields(7, "FIELDNAME") = "LGORT"
tFields.AppendRow
tFields(8, "FIELDNAME") = "CHARG"
tFields.AppendRow
tFields(9, "FIELDNAME") = "SOBKZ"
tFields.AppendRow
tFields(10, "FIELDNAME") = "LIFNR"
tFields.AppendRow
tFields(11, "FIELDNAME") = "KUNNR"
tFields.AppendRow
tFields(12, "FIELDNAME") = "KDAUF"
tFields.AppendRow
tFields(13, "FIELDNAME") = "KDPOS"
tFields.AppendRow
tFields(14, "FIELDNAME") = "PLPLA"
tFields.AppendRow
tFields(15, "FIELDNAME") = "ERFMG"
tFields.AppendRow
tFields(16, "FIELDNAME") = "ERFME"
tFields.AppendRow
tFields(17, "FIELDNAME") = "EBELN"
tFields.AppendRow
tFields(18, "FIELDNAME") = "EBELP"
tFields.AppendRow
tFields(19, "FIELDNAME") = "SGTXT"
tFields.AppendRow
tFields(20, "FIELDNAME") = "WEMPF"
tFields.AppendRow
tFields(21, "FIELDNAME") = "ABLAD"
tFields.AppendRow
tFields(22, "FIELDNAME") = "KOSTL"
tFields.AppendRow
tFields(23, "FIELDNAME") = "AUFNR"
tFields.AppendRow
tFields(24, "FIELDNAME") = "ANLN1"
tFields.AppendRow
tFields(25, "FIELDNAME") = "ANLN2"
tFields.AppendRow
tFields(26, "FIELDNAME") = "GJAHR"
tFields.AppendRow
tFields(27, "FIELDNAME") = "PS_PSP_PNR"
tFields.AppendRow
tFields(28, "FIELDNAME") = "BSTMG"
tFields.AppendRow
tFields(29, "FIELDNAME") = "BSTME"
tFields.AppendRow
tFields(30, "FIELDNAME") = "MANDT"

Func.Call
Debug.Print tData.RowCount
imax = tData.RowCount
For ix = 1 To imax
Debug.Print tData(ix, 1)
i = 0
T = Split(tData(ix, 1), vbTab)
Do While i < tFields.RowCount
Debug.Print T(i)
i = i + 1
Loop
Next

'Release rfc function
Functions.RemoveAll

End Sub

Sub Start()
Logon
Main
Main2
Main
Main2
Main
Main2
Connection.Logoff
End Sub
ein bischen tricky war die Trennung von Logon und dem Function Call bzw. mehrer Aufrufe von Tabellen.

1.) Nachtrag: Kollegen haben erfolgreich mit SAPGUI 7.5 SP7 getestet.
2.) Nachtrag: Tipfehler -> Nicht Set iDelimeter = Func.Exports("DELIMETER") , sondern Set iDelimiter = Func.Exports("DELIMITER")
dann klappts auch mit iDelimiter.value = vbtab !


gruß Jens

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag (Insgesamt 5):
ewxThomas R.black_adeptAlpmannLukas Sanders

<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: VBA & RFC_READ_TABLE mit GUI750 SP8

Beitrag von Alpmann (ForumUser / 62 / 5 / 19 ) »
Hallo zusammen,

wir wollten auch schon mal auf GUI750 wechseln und hatten dann Probleme mit RFC-Zugriffen aus MS-Access heraus. Deswegen setzen wir noch den 740 ein. Eine Lösung dafür konnte ich damals nicht finden. Danke erstmal hierfür.

Kleine Ergänzung:

mittels

tData.freetable

wird der Tabelleninhalt wieder gelöscht. So kann man mehrere Aufrufe problemlos hintereinander laufen lassen.

Mit freundlichen Grüßen
Matthias Alpmann

Seite 1 von 1

Vergleichbare Themen

3
Antw.
3008
Views
read table
von kostonstyle » 27.03.2008 15:38 • Verfasst in ABAP® für Anfänger
8
Antw.
9430
Views
Read Table mit MAX Datum und Zeit
von autohandel7 » 23.08.2018 10:54 • Verfasst in ABAP® für Anfänger
2
Antw.
3532
Views
READ TABLE dynamisch aufrufen
von RiffRaff » 27.12.2004 12:04 • Verfasst in ABAP® Core
5
Antw.
18966
Views
read table liefert sy-subrc = 4
von c oco » 04.04.2011 17:09 • Verfasst in ABAP® für Anfänger
33
Antw.
14456
Views
READ TABLE ... WITH KEY [logische Verknüpfung mögl?]
von sapjob » 18.11.2015 11:27 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Regex in where
vor 10 Stunden von tar 8 / 247
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1536
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 183
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 422

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Regex in where
vor 10 Stunden von tar 8 / 247
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1536
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 183
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 422

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 2 Tagen von snooga87 1 / 129
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3304
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9860