Hallo luci,
ich stand auch vor der Herausforderung Dokumente mittels des Funktionsbausteines BAPI_DOCUMENT_CHECKOUTVIEW2 aus dem SAP zu holen. Da gibt da viel zu berücksichtigen. Dazu gleich mehr.
Ich habe dieses aber mittels Visual Basic (Access) gelöst:
- Access 2000 / SAP GUI 7.30 / Windows XP
- Access 2013 Runtime / SAP GUI 7.20 / Windows Server 2008 R2
- Access 2000 Runtime / SAP GUI 7.20 / Windows Server 2008 R2
Wichtig ist, das die Umgebungsvariable "Path" den Pfad des SAP-GUI’s enthalten muss (wegen Zugriff auf sapftp;saphttp) - zum Beispiel: "C:\Programme\SAP\FrontEnd\SAPgui"
Wenn diese Variable nicht den Pfad des SAP-GUI enthält, dann können die Programme sapftp und saphttp nicht gestartet werden, die die Übertragung aus dem Content-Server durchführen.
Das Ausführen der Dateien sapftp und saphttp muss erlaubt werden. Die Suche hiernach hat bei mir am meisten Zeit beansprucht. Dazu werden die folgenden Anweisungen benötigt.
Private Const RAccess As String = " "
Private Declare Function RfcAllowStartProgram Lib "librfc32" (ByVal RAccess As String) As Integer
Zu guter letzt hier die Funktion, die aus dem Content-Server die Datei holt. Die entsprechenden Rechte für den User, der angemeldet wird, müssen natürlich vorhanden sein.
Function Dokument_aus_Content_Server_kopieren()
Dim ReturnCode As Variant
Dim Rückgabe As Variant
ReturnCode = RfcAllowStartProgram("sapftp;saphttp")
Dim RFC_DOC_lesen As Object
Dim RFC_DOC_lesen_BAPI_DOC_FILES2 As Object
Dim RFC_DOC_lesen_RETURN As Object
' hier werden nur die SAP-Anmeldedaten in globale Variablen
' geholt
Rückgabe = get_SAP_Daten_Anmeldung()
' ab hier Dokumente aus dem Content Server holen
' via RFC
' im SAP Transaktion CV03N - Dokumente anzeigen
Set functionCtrl = CreateObject("SAP.Functions")
Set SapConnection = functionCtrl.Connection
SapConnection.CLIENT = SAP_Client
SapConnection.User = SAP_User
SapConnection.Password = SAP_User_Passwort
SapConnection.Language = SAP_Sprache
SapConnection.HostName = SAP_Host
SapConnection.SystemNumber = SAP_SystemNumber
SapConnection.tracelevel = 0
If Not SapConnection.Logon(0, True) Then
MsgBox "Logon failed !!"
Else
MsgBox "Logon erfolgreich!!"
End If
Set RFC_DOC_lesen = functionCtrl.Add("BAPI_DOCUMENT_CHECKOUTVIEW2")
Set RFC_DOC_lesen_BAPI_DOC_FILES2 = RFC_DOC_lesen.Tables("DOCUMENTFILES")
Set RFC_DOC_lesen_RETURN = RFC_DOC_lesen.Imports("BAPIRET2")
RFC_DOC_lesen.exports("DOCUMENTNUMBER") = "0000000000000010000011897" ' Dokumentnummer
RFC_DOC_lesen.exports("DOCUMENTTYPE") = "Q11" ' Dokumentenart
RFC_DOC_lesen.exports("GETSTRUCTURE") = "1" ' Dokumentenstruktur
RFC_DOC_lesen.exports("DOCUMENTPART") = "000" ' Dokumentenstruktur
RFC_DOC_lesen.exports("DOCUMENTVERSION") = "00" ' Dokumentenstruktur
RFC_DOC_lesen.exports("GETCOMPONENTS") = "X" ' Dokumentenstruktur
RFC_DOC_lesen.exports("ORIGINALPATH") = "c:\" ' Dokumentenstruktur
RFC_DOC_lesen.exports("GETHEADER") = "X" ' Kopfdokument auschecken
If RFC_DOC_lesen.CALL = True Then
Debug.Print "Datei: " & RFC_DOC_lesen_BAPI_DOC_FILES2.rows(1)(11)
Else
MsgBox "ERROR CALLING SAP REMOTE FUNCTION CALL"
End If
SapConnection.Logoff
End Function
Im Direktbereich in Access steht folgendes:
Datei: c:\_AN44201.pdf
Vorhandene Dateien werden überschrieben.
Da ich diese Antwort erst ca. ein Jahr nach deiner Frage reinstelle, denke ich, dass ich anderen hier mehr helfe, als dir, da du wahrscheinlich eine andere Lösung gefunden hast, oder das Projekt eingestampft hast.
Mit freunlichen Grüßen
Matthias Alpmann