Klasse: CL_ABAP_GZIP

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

ABAP Web Dynpro, BusinessServerPages; Erstellung von Webapplikationen.
19 Beiträge • Seite 1 von 2 (current) Nächste
19 Beiträge Seite 1 von 2 (current) Nächste

Klasse: CL_ABAP_GZIP

Beitrag von Gast ( / / 0 / 3 ) »
Hallo zusammen,

hat schon mal irgendjemand mit obiger Klasse gearbeitet und kann mir sagen wie sie verwendet werden muß ??
Irgendwie hab ich dabei ein "kleines" Problem :-(

Möchte mehrere Files (Content als XSTRING vorhanden)
in ein ZIP packen.

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


Re: Klasse: CL_ABAP_GZIP

Beitrag von Gast ( / / 0 / 3 ) »
Gast hat geschrieben: Irgendwie hab ich dabei ein "kleines" Problem :-(
Was für ein Problem hast Du denn? Bekommst Du eine Fehlermeldung? Wenn ja, wie lautet diese?
Hast Du einen Codingsnippet, den Du posten kannst, damit man sich das ansehen kann.

Im Prinzip sind es ja statische Methoden, die Du nutzt (für Text und für Binary-Daten). Die Methoden mußt Du entsprechend der Signatur aufrufen.
Über den Parameter GZIP_OUT nimmst Du dann den komprimierten Stream entgegen.

Im Rahmen von BSP kannst Du den dann an den Browser schicken (Response) mit Länge und Mimetype.

Klasse CL_ABAP_GZIP

Beitrag von Gast ( / / 0 / 3 ) »
Hallo,

Fehlermeldung wäre schön. Dann könnte ich mir ja vielleicht noch ein Bild machen. Aber die BSP bricht einfach ab - ohne Fehlermeldung.

Ist vielleicht der Aufruf der Methode falsch ??


====== Codeextrakt ===
*
.
.
.
lf_content TYPE xstring,
lf_content_all TYPE xstring,
l_string TYPE string.

DATA: lf_size TYPE i,
lf_gzip_out_len TYPE i.


FIELD-SYMBOLS: <fs> TYPE drao,
<gzip_in> TYPE xsequence,
<gzip_out> TYPE xsequence.
*
*
Lesen der Files anhand BAPI_DOCDETAIL
.
Checkout der Files mittels BAPI_CHECKOUTVIEW
im loop um den binären content zu bekommen
.
.
.
.
.
**----------------------------------------------------------------------
* Transfer internal table into a XSTRING
**----------------------------------------------------------------------
LOOP AT lt_content ASSIGNING <fs> .
ls_xdata-line = <fs>-orblk.
APPEND ls_xdata TO lt_xdata.
IF lf_size IS INITIAL.
lf_size = <fs>-orln.
else.
lf_size = lf_size + <fs>-orln.
ENDIF.
ENDLOOP.

CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING: input_length = lf_size
IMPORTING: buffer = lf_content
TABLES: binary_tab = lt_xdata
EXCEPTIONS: failed = 1
OTHERS = 2.

IF sy-subrc NE 0.
nothing = 1.
ENDIF.
concatenate lf_content_all lf_content
into lf_content_all in byte mode.
ENDLOOP.
*
* ZIP
ASSIGN lf_content to <gzip_in>.

CALL METHOD cl_abap_gzip=>compress_binary
EXPORTING
raw_in = <gzip_in>
raw_in_len = lf_size
IMPORTING
gzip_out = <gzip_out>
gzip_out_len = lf_gzip_out_len.

*
lf_size = XSTRLEN( lf_content ).

concatenate l_dir l_file into lf_filename.

lf_mimetype = 'application/x-zip-compressed'.


**----------------------------------------------------------------------
* Send data to browser
**----------------------------------------------------------------------
IF nothing = 0.
lf_value = lf_mimetype.

* response = runtime->server->response.
response->set_header_field( name = 'Content-Type'
value = lf_value ).

CONCATENATE 'inline; filename="' lf_filename INTO lf_value.

response->set_header_field( name = 'Content-Disposition'
value = lf_value ).

response->set_data( lf_content ).


response->delete_header_field( 'Cache-Control' ).
response->delete_header_field( 'Expires' ).
response->delete_header_field( 'Pragma' ).

navigation->response_complete( ).

=============

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo,

ich würde Dir empfehlen, den Teil der Komprimierung aus der BSP rauszunehmen und erst mal in einem kleinen Testreport auszuprobieren. Da läßt sich die Fehleranalyse einfacher betreiben. Außerdem siehst Du dann, ob es an der Methode liegt und ob Du evtl. eine Fehlermeldung o.ä. zurückbekommst.

Gruss,
Jens

Klasse CL_ABAP_GZIP

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Jens,

ohne Komprimierung d.h ohne Aufruf der Klasse funktioniert Alles besten. Ich benutze das Coding ja auch um einzelne Files im Broser downzuloaden und zu viewen. Aber wenn ich ein Sammel- sprich ZIP-File erstellen und einen Massendownload durchführen möchte --> :(

Werde mal die Mimik in einen Test FB einbauen un d sehen was da dann so passiert.

Klasse CL_ABAP_GZIP

Beitrag von Gast ( / / 0 / 3 ) »
Hallo,

habe mal ein wenig an meinem Koting :-) geändert und nunmehr auch zumindest den Erfolg, dass mir die BSP nicht abraucht.
Aber trotzdem --> das ZIP, dass mir die Methode erstellen soll ist leider, wenn ich es an den Browser übergebe , nicht mehr lesbar.
""Ungültiges Archiv"" :cry:

What the hell....

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo,

vielleicht liegt es am Bytestream und der zugehörigen Länge, die Du übergibst. Hast Du mal probiert, ob es funktioniert, wenn Du einen einfachen Text übergibst und die Methode für Textkomprimierung nutzt?

Gruss,
Jens

Klasse CL_ABAP_GZIP

Beitrag von Gast ( / / 0 / 3 ) »
Hallo,
am Bytestream dürfte es eigentlich nicht liegen, da ja das Viewen des Files (ohne dass ich es zum ZIP komprimiere) ja auch funktioniert.
Die Länge des Streams ist doch ein optionaler Parameter. Momentan gebe ich Diese nicht mit.
Könnte es daran liegen ???

Klasse CL_ABAP_GZIP

Beitrag von Gast ( / / 0 / 3 ) »
Verzweiflung,

jetzt hab ich's mal mit 'nem Text sprich "compress_text" probiert und bekomm das gleiche Ergebnis --> Ungültiges Archiv :cry:

warum, wieso, weshalb :?:

Wer hat 'ne Erleuchtung und kann mich aus meiner Not befreien :?:

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo,

es könnte natürlich auch an etwas 'lapidarem' wie einem Bug liegen. Ich probiers mal aus, ob es bei mir klappt und geb Dir dann Bescheid.

Gruss,
Jens

Klasse CL_ABAP_GZIP

Beitrag von Gast ( / / 0 / 3 ) »
Hallo Jens,

hast Du mich vergessen oder läuft's bei Dir auch nicht ??

Re: Klasse CL_ABAP_GZIP

Beitrag von Hermann ( / / 0 / 3 ) »
Gast hat geschrieben:Die Länge des Streams ist doch ein optionaler Parameter. Momentan gebe ich Diese nicht mit.
Könnte es daran liegen ???
Sehr wahrscheinlich liegt es daran. Gib die Länge des Bytestreams mit.

Hermann

Klasse: CL_ABAP_GZIP

Beitrag von Gast ( / / 0 / 3 ) »
HAllo zusammen,

auch die Angabe des Bytestreams hat bei mir keinerlei positive Auswirkungen. Weiterhin ist das generierte ZIP-File korrupt. D.h. leider läßt es sich nicht mehr öffnen.

Hat Irgendjemand bereits mit dieser Klasse gearbeitet und kann mir mal 'nen Auszug des Codings posten ??

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo,

habe mich zwischenzeitlich mal schlau gemacht. Die Klasse CL_ABAP_GZIP verführt einen anzunehmen, daß man damit sowohl eine Komprimierung als auch Dekomprimierung machen kann. Dem ist leider nicht so.
Die Dekomprimierung funktioniert zwar (dafür war die Klasse ursprünglich zunächst vorgesehen), die Komprimierung hingegen ist nicht vollständig implementiert. Hier fehlt header und trailer entsprechend des gzip Formataufbaus (siehe auch hier:
www.gzip.org).
Solange das noch nicht implementiert ist, kann man die Klasse nicht zum Komprimieren von Dateien verwenden (es sei denn man schafft es den komprimierten Stream selbst um einen Header und Trailer zu erweitern).

Gruss,
Jens

Beitrag von Jens (Specialist / 106 / 0 / 0 ) »
Hallo,

noch folgender Nachtrag: Eventuell könnte man über einen 'Umweg' Dateien zippen.
Funktionsbaustein 'GUI_EXEC'.
Man müßte mit CL_GUI_FRONTEND_SERVICES, Methode GUI_DOWNLOAD, die zu zippenden Dateien in ein bestimmtes Verzeichnis stellen, dann mit GUI_EXEC ein zip-programm Aufrufen (winzip im command mode), dann die gezippten Dateien über GUI_UPLOAD wieder hochladen falls gewünscht.

Alternativ wäre auf dem Applikationsserver möglich, mit open bzw. close dataset zu arbeiten und dann ebenfalls mit einem Betriebssystemkommando zu arbeiten um die Files zu zippen.
Das Betriebssystemkommando kann man ausführen mit:

Code: Alles auswählen.

data: l_result type standard table of char100.
CALL 'SYSTEM' ID 'COMMAND' FIELD <KOMMANDO mit vollständigen Pfaden>
ID 'TAB' FIELD l_result.
Gruss,
Jens

Vergleichbare Themen

4
Antw.
1260
Views
Workflow ABAP Klasse
von ZF_SAPler » 12.05.2022 21:46 • Verfasst in ABAP® für Anfänger
1
Antw.
3168
Views
Methode dynamisch zu Klasse hinzufügen in ABAP Cloud
von Saftladen » 17.02.2026 13:14 • Verfasst in ABAP Objects®
1
Antw.
5857
Views
Lokale Klasse autom. in globale Klasse ändern
von JohnLocklay » 09.01.2019 09:10 • Verfasst in ABAP Objects®
5
Antw.
7022
Views
Klasse soll Typdefinition von anderer Klasse nutzen
von debianfan » 24.05.2017 11:30 • Verfasst in ABAP Objects®
0
Antw.
1606
Views
Hilfe zur Klasse
von supermario73 » 29.02.2008 08:54 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

LSMW-Problem
vor 2 Tagen von mazu gelöst 5 / 978
ATC Finding in Smartforms
vor 6 Tagen von sap_enthusiast 2 / 952

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

LSMW-Problem
vor 2 Tagen von mazu gelöst 5 / 978
ATC Finding in Smartforms
vor 6 Tagen von sap_enthusiast 2 / 952

Unbeantwortete Forenbeiträge

SFP/SEGW - Fehler beim Rendering
letzen Monat von Manfred K. 1 / 85560
Benutzerdefinierte Felder PSP
January 2026 von Rabea1103 1 / 138793