Upload von Dokumenten in das BDS 
From Theobald Software
Mit ERPConnect kann man einfach Dokumente wie Excel Dokumente, Word Dokumente oder auch Bilder in das BDS (Business Document Service) hochladen.
Das gewünschte File wird in ein Byte Array geladen und dann Zeile für Zeile an den Funktionsbaustein BDS_BUSINESSDOCUMENT_CREA_TAB gesendet.
Im unteren Beispiel sehen wir ein Upload eines Excel Sheets in das BDS. Mit ein paar Änderungen wie z.B. der Document Class, dem Dokument- oder dem MIME-Typ ist es möglich, andere Dokumentenarten hochzuladen.
Alle Dokumenten-Klassen finden Sie im SAP IMG --> Basis Services --> Archive Link --> Basic Customizing
Der Classname (BKPF) steht für einen Dokumenten-Typ für Rechnung. Im Document Navigator (Transaktion OAOR) finden Sie alle Dokumenten-Klassen.
Der Objectkey (100000000115642009) für BKPF fügt sich zusammen aus dem Buchungskreis, der Dokumentennummer und dem Geschäftsjahr.
[C#]
static void Main(string[] args) { try { string sPath = System.IO.Path.GetDirectoryName(@"C:\temp\Material.xlsx"); string sFile = System.IO.Path.GetFileName(@"C:\temp\Material.xlsx"); byte[] bytes; R3Connection con = new R3Connection("ptmalg", 05, "xxx", "xxx", "en", "800"); con.Open(false); RFCFunction func = con.CreateFunction("BDS_BUSINESSDOCUMENT_CREA_TAB"); RFCTable tbData = func.Tables["CONTENT"]; RFCTable tbSig = func.Tables["SIGNATURE"]; RFCTable tbComp = func.Tables["COMPONENTS"]; func.Exports["CLASSNAME"].ParamValue = "BKPF"; func.Exports["CLASSTYPE"].ParamValue = "BO"; func.Exports["OBJECT_KEY"].ParamValue = "100000000115642009"; func.Exports["BINARY_FLAG"].ParamValue = "X"; bytes = System.IO.File.ReadAllBytes(@"C:\temp\Material.xlsx"); RFCStructure Content = new RFCStructure(); for (int offset = 0; offset < bytes.Length; offset += 1022) { byte[] ExportBytes = new byte[1022]; // Bei VB das Array mit 1021 dimensionieren if (offset + 1022 > bytes.Length) Array.Copy(bytes, offset, ExportBytes, 0, bytes.Length - offset); else Array.Copy(bytes, offset, ExportBytes, 0, 1022); Content = tbData.AddRow(); Content["LINE"] = ExportBytes; } RFCStructure recComp = tbComp.AddRow(); recComp["DOC_COUNT"] = 1; recComp["COMP_COUNT"] = 1; recComp["COMP_ID"] = sFile; recComp["MIMETYPE"] = "application/vnd.ms-excel"; recComp["COMP_SIZE"] = bytes.Length; RFCStructure recSig = tbSig.AddRow(); recSig["DOC_COUNT"] = 1; recSig["DOC_ID"] = ""; recSig["DOC_VER_NO"] = 1; recSig["DOC_VAR_ID"] = 1; recSig["DOC_VAR_TG"] = "OR"; recSig["COMP_COUNT"] = 1; recSig["PROP_NAME"] = "BDS_DOCUMENTTYPE"; recSig["PROP_VALUE"] = "BDS_SHEET"; recSig = tbSig.AddRow(); recSig["DOC_COUNT"] = 1; recSig["DOC_ID"] = ""; recSig["DOC_VER_NO"] = 1; recSig["DOC_VAR_ID"] = 1; recSig["DOC_VAR_TG"] = "OR"; recSig["COMP_COUNT"] = 1; recSig["PROP_NAME"] = "BDS_DOCUMENTCLASS"; recSig["PROP_VALUE"] = "XLS"; recSig = tbSig.AddRow(); recSig["DOC_COUNT"] = 1; recSig["DOC_ID"] = ""; recSig["DOC_VER_NO"] = 1; recSig["DOC_VAR_ID"] = 1; recSig["DOC_VAR_TG"] = "OR"; recSig["COMP_COUNT"] = 1; recSig["PROP_NAME"] = "DESCRIPTION"; recSig["PROP_VALUE"] = sFile; recSig = tbSig.AddRow(); recSig["DOC_COUNT"] = 1; recSig["DOC_ID"] = ""; recSig["DOC_VER_NO"] = 1; recSig["DOC_VAR_ID"] = 1; recSig["DOC_VAR_TG"] = "OR"; recSig["COMP_COUNT"] = 1; recSig["PROP_NAME"] = "LANGUAGE"; recSig["PROP_VALUE"] = "EN"; func.Execute(); Console.WriteLine("Upload OK"); Console.ReadLine(); } catch (Exception e1) { Console.WriteLine(e1.Message); Console.ReadLine(); } }
Auf dem linken unteren Bild sieht man den Document Navigator für die Suche nach Dokumenten. Auf dem rechten Bild sie man die soeben hochgeladene Excel-Datei.


