ich habe folgendes Problem und bin langsam mit meinem Latein am Ende.
In einer Java Applikation (nicht von mir geschrieben) wird ein Z-Baustein aufgerufen.
In dem Baustein ermitteln wir zur Dokumentennummer und Dokumentenart das nötige
Dokument. Mit Hilfe des Bausteins SCMS_DOC_READ erhalte ich den BIN-Content
und dieser wird an die Applikation weitergereicht.
Wenn nun dieser Content heruntergeladen wird, dann hat es eine andere Größe wie das Original und die Datei ist unbrauchbar.
Wenn ich in einem ABAP-Testprogramm den gleichen Z-Baustein aufrufe und mittels GUI-Download (Parameter Filesize wird hier mitgegeben) den Inhalt herunterlade, dann passt die Datei auch wieder. Ohne Angabe von Filesize gleiches Problem wie bei der Java-Applikation.
Wie kann es sein das die Datei unnötige viele Zeichen beinhaltet und wie kann ich das Problem vermeiden, dass die Datei bei dem Download in der Java-Applikation unbrauchbar wird?
Die Daten liegen in einer Tabelle mit einer bestimmten Zeilenlänge vor. Das führt dazu, dass eine Datei mit einer Größe die sich nicht durch diese Zeilenlänge teilen lässt hinten noch NULL-Bytes angehängt bekommt. Daher muss man wissen wie groß die wirkliche Filesize ist, um den unnötigen Rest abzuschneiden. Bei diesem Baustein kommt noch erschwerend hinzu, dass er auch mehrere "physische" Dateien die in einem Archiv-Dokument verpackt sein können, auslesen kann. Das bedeutet in ACCESS_INFO stehen auch die Zeilennummern drinnen wo eine Datei anfängt und aufhört inklusive der tatsächlichen Dateigröße.
Wir hatten bei uns früher auch noch einen Programmierfehler der ein ähnliches Problem mit dem Archiv verursacht hat: Unter unserem ersten (non-Unicode) System haben wir dummerweise die Daten als CONTENT_TXT abgelegt obwohl es Binärdaten waren. Als wir dann auf Unicode umgestellt haben, konnten wir die Daten plötzlich nicht mehr lesen. Bis wir draufgekommen sind, dass es bei CONTENT_TXT zu einer Codepagekonvertierung hin zum Archivsystem kommt. Wir sind dann hergegangen und haben im Alt-System die Daten mittels CONTENT_TXT ausgelesen und erneut als CONTENT_BIN geschreiben, damit wir sie im neuen System als CONTENT_BIN wieder lesen konnten.
Worauf ich hinaus will: Wenn die Daten von einem System als CONTENT_TXT geschreiben wurden kann nur dieses System mit seiner Codepage die Daten korrekt lesen. Jedes andere System muss die Daten zuerst als Text interpretieren und eine Codepage-Konvertierung machen um die "richtigen" Binärdaten zu erhalten.
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.