ArchiveLink Datei extern ablegen

Getting started ... Alles für einen gelungenen Start.
26 Beiträge • Seite 1 von 2 (current) Nächste
26 Beiträge Seite 1 von 2 (current) Nächste

ArchiveLink Datei extern ablegen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Guten Morgen,

Ich versuche momentan eine ArchiveLink-Schnittstelle einzurichten. Content-Repository, Dokumentenart usw. sind angelegt.
Nun soll ein Dokument das bspw. an einen Terminauftrag angehängt wird auf meinem (zu Testzwecken) Apache Tomcat Server, bzw. einem Ordner auf meinem PC, abgelegt werden.
SAP sendet eine Request an mein Servlet, jedoch weiß ich nicht wie ich an die Datei komme die angehängt werden soll.

Weiß jemand Rat, wie ich an die anzuhängende Datei herankomme ?

Momentan versuche ich über die gesendete Request und die darin enthaltenen Daten, wie docID usw. eine URL zu erstellen und dort eine Datei zu downloaden.
Wenn ich diese URL im Browser anwähle, dann bekomme ich eine Datei zum Download die vom Format multipart/formdata ist. Wenn ich diese im Notepad++ öffne erhalte ich jedoch nur folgendes, obwohl ich eine PDF mit kurzem Textinhalt angehängt habe:

--ejjeeffe0
--ejjeeffe0--


Danke schonmal für jegliche Hilfestellung!

Grüße Dominic

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


Re: ArchiveLink Datei extern ablegen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Falls sich noch jemand findet der sich damit auskennt.
Wir haben jetzt in der Spezifikation gelesen dass die Datei im Body der Request übergeben wird und haben diesen mittels eines Readers isoliert und anschließend in eine Text Datei geschrieben.
Dabei kommen jedoch bis jetzt nur Hyroglyphen raus, versuchen jetzt das noch irgendwie zu konvertieren.

Aber vielleicht hat ja jemand eine einfachere Lösung.

Re: ArchiveLink Datei extern ablegen

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Dyrdek hat geschrieben:Wir haben jetzt in der Spezifikation gelesen dass die Datei im Body der Request übergeben wird und haben diesen mittels eines Readers isoliert und anschließend in eine Text Datei geschrieben.
Dabei kommen jedoch bis jetzt nur Hyroglyphen raus, versuchen jetzt das noch irgendwie zu konvertieren.
Welchen Reader? Doch wohl hoffentlich einen BYTE.
Ein PDF besteht nämlich aus "Hyroglyphen" und ist mit einem normalen Texteditor nicht lesbar.
Der eigentliche Inhalt ist mit irgendeinem speziellem Verfahren codiert (bitverschiebung) zu dem ich jetzt leider keine Infos finden kann :oops:
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ArchiveLink Datei extern ablegen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Hey,

Haben einen BufferedReader, BufferedWriter und FileWriter verwendet und lassen uns die Datei momentan erstmal einfach in eine Text-Datei schreiben. Also einmal zum Lesen den Reader und dann zum schreiben: BufferedWriter out = new BufferedWriter(new FileWriter(f));
Kommen natürlich nun nur Hyroglyphen raus.


Also momentan haben wir zwei Probleme:
1) Wie schaffen wir es das Ding als PDF abzuspeichern und zum Laufen zu bekommen ?
2) Wenn SAP die Datei anzeigen will, wie schicken wir die Datei im Response-Body zurück ?

Danke schonmal für die Hilfe ;)

Re: ArchiveLink Datei extern ablegen

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin.
Also die PDF Daten werden (wie in der PDF Docu beschrieben) im Multipart format übertragen.
e.g.
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=frontier

This is a message with multiple parts in MIME format.
--frontier
Content-Type: text/plain

This is the body of the message.
--frontier
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64

PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
--frontier--
Dabei ist das PDF zwischen 2 Boundaries (e.g. frontier)
(Hier ist der "contents" zusätzlich Base 64 codiert.)
Es wäre hilfreich wenn Du mal eine kleine Testübertragung zipst und anhängst !
lg Jens
http://en.wikipedia.org/wiki/MIME
<:: 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.

Re: ArchiveLink Datei extern ablegen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Ok, danke.
Das hier können wir mittlerweile in eine Text-Datei schreiben.

--KoZIhvcNAQcB
Content-Disposition: form-data; filename="data"
X-compId: data
Content-Type: application/pdf
Content-Length: 14377

%PDF-1.4
%Çì?¢
5 0 obj
<</Length 6 0 R/Filter /FlateDecode>>
stream

.... [ hier kommt der PDF Teil]

trailer
<< /Size 13 /Root 1 0 R /Info 2 0 R
/ID [<8BAEF29D2909676ECE53BF2D8AD36CC4><8BAEF29D2909676ECE53BF2D8AD36CC4>]
>>
startxref
13963
%%EOF

--KoZIhvcNAQcB--


Wir fragen uns grade nur wie wir lediglich den Inhalt der PDF, also sprich unseren Text in eine Datei schreiben können. :/

Re: ArchiveLink Datei extern ablegen

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
... Die Daten des PDF beginnen EXACT mit %PDF... und der String ist 14377 Bytes lang.
Ich empfehle das mit "Stream.Substr(x,y)" aus dem Stream zu extrahieren .
(http://www.tutorialspoint.com/java/java ... string.htm)
lg Jens
<:: 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.

Re: ArchiveLink Datei extern ablegen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Ok danke dir :)

Habe jetzt den den PDF String mit einem SubString isoliert
Wollten es in einem Base64 Decoder im Internet decoden ob es funktioniert und was bei rauskommt leider negativ.
Versuchen jetzt das in Java zu decoden und abzuspeichern.


%PDF-1.4
%Çì?¢
5 0 obj
<</Length 6 0 R/Filter /FlateDecode>>
stream

[...]

endstream
endobj
12 0 obj
<</Type/Metadata
/Subtype/XML/Length 1559>>stream
<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
<?adobe-xap-filters esc="CRLF"?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
<rdf:Description rdf:about='uuid:cc92ef2c-82af-11e4-0000-b0e26afb9752' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'><pdf:Producer>GPL Ghostscript 9.07</pdf:Producer>
<pdf:Keywords>()</pdf:Keywords>
</rdf:Description>
<rdf:Description rdf:about='uuid:cc92ef2c-82af-11e4-0000-b0e26afb9752' xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:Modi ... ModifyDate>
<xmp:CreateDate>2014-12-10T11:06:51+01:00</xmp:CreateDate>
<xmp:CreatorTool>PDFCreator Version 1.7.1</xmp:CreatorTool></rdf:Description>
<rdf:Description rdf:about='uuid:cc92ef2c-82af-11e4-0000-b0e26afb9752' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:cc92ef2c-82af-11e4-0000-b0e26afb9752'/>
<rdf:Description rdf:about='uuid:cc92ef2c-82af-11e4-0000-b0e26afb9752' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>DownloadTest</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li>ueberalldo</rdf:li></rdf:Seq></dc:creator><dc:description><rdf:Seq><rdf:li>()</rdf:li></rdf:Seq></dc:description></rdf:Description>
</rdf:RDF>
</x:xmpmeta>

Re: ArchiveLink Datei extern ablegen

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Der Inhalt ist nicht BASE64. Das müßte soonst im Header stehen.
Ihr habt doch die PDF "original" Datei. Vergleiche doch die Größe der Datei in den Dateieigenschaften (Byte-genau) mit dem Extrakt.
Bei gleicher Größe den Inhalt vergleichen. (e.g. mit fc.exe).
<:: 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.

Re: ArchiveLink Datei extern ablegen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Die Original-Datei hat 15 KB, die mit SubString extrahierte 14 KB :/

Wenn ich den oberen Part:
--KoZIhvcNAQcB
Content-Disposition: form-data; filename="data"
X-compId: data
Content-Type: application/pdf
Content-Length: 14377

Wieder reinnehme sind sie exakt gleich groß...

Re: ArchiveLink Datei extern ablegen

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Dyrdek hat geschrieben:Die Original-Datei hat 15 KB, die mit SubString extrahierte 14 KB :/
Mach mal jeweils einen Rechtsklick auf die beiden Dateien mit dem Dateiexplorer und lass dir über die "Eigenschaften" die GENAUE GRÖßE in Bytes anzeigen.
Manchmal hängt das vom Datenträger ab, wieviel kb für eine Datei angezeigt wird.

Ansonsten gilt für die Berechnung der Länge:
'=====================================================================================
'The HTTP header ends with an empty line ("CR/LF/CR/LF", 0d0a0d0a).
'The content of the HTTP body starts at the first byte after the "CR/LF/CR/LF".
'So count the bytes from that point.
'If all is well, the byte pointed to by the content length header should indeed be
'the last byte of the object being served by the HTTP server.
'=====================================================================================
Selbstvertändlich muß der Stream binär geschrieben werden.
<:: 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.

Re: ArchiveLink Datei extern ablegen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
Hab ich gemacht die Original-Version hat 133 Byte mehr gehabt.
Versuche das mit dem String gleich nochmal.

Vielleicht schweife ich ab, aber gibt es keine "einfachere" Möglichkeit die Datei aus der Request (anscheinend Multipart) herauszulösen?
Habe mir gerade die Part-Names ausgeben lassen. Da ich etwas gefunden habe, bei dem man anscheinend über getPart() die File runterladen kann. Aber aus den Namen werde ich nicht schlau, bzw. kann da keinen rauslesen in dem sich eine Datei verstecken könnte.

------------------------------------------> Inhalte der Parts ist immer null :/ also auch keine Option denke ich...
Part: create
Part: pVersion
Part: contRep
Part: docId
Part: docProt
Part: accessMode
Part: authId
Part: expiration
Part: secKey

Re: ArchiveLink Datei extern ablegen

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Dyrdek hat geschrieben:die Original-Version hat 133 Byte mehr gehabt
das ist schlecht, da man jetzt kontrollieren muß, ob hier eine code conversion ( UTF-8) o.ä. zum tragen kommt.
Part: create
Part: pVersion
Part: contRep
Part: docId
Part: docProt
Part: accessMode
Part: authId
Part: expiration
Part: secKey
das sind Meta Daten aus der URL:
"create" ist die Aktion (anlegen eines oder mehrerer Dokumente)
"docID" ist der Handle aus der TOA01 ( das einzige was SAP zum Auffinden im Archiv kennt !)
"contRep" ist der Name des Archivs (e.g. H0)
"accessMode" ist Teil der Aktion (z.B.c = anlegen)
(steht alles in der PDF Docu ab Seite 262 ) :wink:

Mein Tip übertage doch mal eine ASCII Tabelle mit den 256 ASCII Codes und kontrolliere das Ergebnis.

lg Jens
<:: 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.

Re: ArchiveLink Datei extern ablegen

Beitrag von Dyrdek (Specialist / 306 / 30 / 0 ) »
OK Vielen Dank :)
Ja das haben wir bereits gelesen ;)

Ich habe mal eine allgemeine Frage, wir sind jetzt soweit das wir quasi die Datei aus dem Body herausholen müssen, kommt anscheinend ja als multipart-Datei.
Und die Ablage von Dateien haben bereits ja andere Mitglieder in dem Forum erfolgreich geschafft.
Darf ich fragen wie du das gemacht hast ? Langsam sind wir etwas am verzweifeln, da wir es irgendwie nicht schaffen die Datei anständig abzuspeichern. Wir schaffen es lediglich den Text auszulesen und mittels Substring diesen vom Header zu trennen. Aber das funktioniert auch nur bei einer Text-Datei, bei PDF bekommen wir schlichtweg nur hyroglyphen :/

Wir geben uns echt Mühe und ich werde das Thema Multipart usw. heute nochmal von vorne aufrollen, aber gibt es da nicht eine "allgemeine" Lösung wie die Dateien abgelegt werden können?
Entschuldige bitte die direkte Frage :/

Re: ArchiveLink Datei extern ablegen

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Dyrdek hat geschrieben:Darf ich fragen wie du das gemacht hast ?
Als ich das Thema hatte, habe ich zu Anfang etliche Tests mit einem existierenden Archivierungstool durchgeführt.
Ich habe zudem mit Wireshark(portable) und Socketsniff den Netzwerktraffic protokolliert.
Ausserdem habe ich die Ergebnisse mit der PDF Docu verglichen.
Meinen Archivelink Adapter habe ich in einer virtuellen Maschine programmiert und zwar mit einer Mischung aus C++ und VB6
Das Programm ist eine ausführbare Websocket - Anwendung (Winsock2) mit einer Dateigröße von nur 150 kb (viel RAM für Dokumente also).
(Der Substring-Befehl im VB lautet MID(string,Länge,Startbyte))
Entschuldige bitte die direkte Frage :/

kein Problem.

lg Jens
<:: 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.

Vergleichbare Themen

0
Antw.
1199
Views
ArchiveLink: Manuelles Ablegen vom Anwendungsbeleg aus
von Frog » 13.04.2007 21:48 • Verfasst in ABAP® Core
8
Antw.
6219
Views
ArchiveLink: Trotz Ablegen kein Dokument auf Server
von Thanatos82 » 14.03.2013 10:48 • Verfasst in ABAP® Core
12
Antw.
6025
Views
ArchiveLink / DLL Datei
von Dyrdek » 02.12.2014 10:56 • Verfasst in ABAP® für Anfänger
0
Antw.
1188
Views
TXT Datei auf DMS Portal ablegen
von TakePotLuck » 10.09.2013 14:29 • Verfasst in ABAP® für Anfänger
3
Antw.
5543
Views
Datei auf dem Server ablegen
von Nadine_2706 » 02.10.2012 07:33 • 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

Daten an Tabelle binden
vor 45 Minuten von Bright4.5 3 / 1468
Regex in where
vor 2 Stunden von tar 6 / 124
Programm anlegen mit Vorlage
vor 17 Stunden von DeathAndPain 2 / 119
IT0024 Qualifikationen CP-ID
vor 17 Stunden von DeathAndPain 2 / 353

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

Daten an Tabelle binden
vor 45 Minuten von Bright4.5 3 / 1468
Regex in where
vor 2 Stunden von tar 6 / 124
Programm anlegen mit Vorlage
vor 17 Stunden von DeathAndPain 2 / 119
IT0024 Qualifikationen CP-ID
vor 17 Stunden von DeathAndPain 2 / 353

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 19 Stunden von snooga87 1 / 86
aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821