Code: Alles auswählen.
method ONACTIONSTART_UPLOAD.
DATA lo_nd_file_upload TYPE REF TO if_wd_context_node.
DATA lo_el_file_upload TYPE REF TO if_wd_context_element.
DATA ls_file_upload TYPE wd_this->Element_file_upload.
DATA lo_nd_tabfileinfo TYPE REF TO if_wd_context_node.
DATA it_tabfileinfo TYPE TABLE OF wd_this->Elements_tabfileinfo.
DATA lo_el_tabfileinfo TYPE REF TO if_wd_context_element.
DATA: obj_zip TYPE REF TO cl_abap_zip.
* Get upload data from context
lo_nd_file_upload = wd_context->path_get_node( 'FILE_UPLOAD' ).
lo_el_file_upload = lo_nd_file_upload->get_element( ).
lo_el_file_upload->get_static_attributes( IMPORTING static_attributes = ls_file_upload ).
* Check if file is zipped
IF ls_file_upload-mimetype = 'application/x-zip-compressed'.
* Create ZIP object
CREATE OBJECT obj_zip.
* Unzip data
obj_zip->load( ls_file_upload-file_content ).
obj_zip->get( EXPORTING index = 1
IMPORTING content = ls_file_upload-file_content
EXCEPTIONS zip_index_error = 1
zip_decompression_error = 2
OTHERS = 3 ).
ENDif.
* Set data back to context
lo_el_file_upload->set_static_attributes( static_attributes = ls_file_upload ).
FREE: lo_nd_file_upload, lo_el_file_upload, obj_zip.
CLEAR: ls_file_upload.
endmethod.
Habe jetzt die Methode CRC32 ausgefüht.Thanatos82 hat geschrieben:Schau dir mal die Methoden der Klasse in der SE24 an.. GET dürfte dir hier weiterhelfen.. und die Methode CRC32 dürfte dir den gewünschten Wert als integer zurückgeben, wenn ich das beim querlesen über google jetzt richtig verstanden habe. Und um deine Tabelle zu erstellen, würd ich es mit einem Loop oder nem READ versuchen und dabei pro GET eine tabellenzeile erzeugen.
EDIT: Schau dir mal die Parameter der GET Methode an.. per Index kannste durch deine ZIP Datei loopen, solange sy.subrc dabei 0 bleibt is'ne datei vorhanden und du kannst das in deine Tabelle füllen. Und Content gibt dir dann sogar den XString zurück
Code: Alles auswählen.
CALL METHOD CL_ABAP_ZIP=>CRC32
EXPORTING
CONTENT = ls_file_upload-file_content
RECEIVING
CRC32 = test.
Code: Alles auswählen.
LOOP at it_file_upload INTO ls_file_upload.
lv_index = lv_index + 1.
IF sy-subrc = 0.
obj_zip->get( EXPORTING index = lv_index
name = ls_file_upload-filename
IMPORTING content = ls_file_upload-file_content
EXCEPTIONS zip_index_error = 1
zip_decompression_error = 2 ).
ENDIF.
lv_anzal = lv_index - 1.
ENDLOOP.
Da brauchst du dann nur noch den LOOP damit durchführen und darin die GET Methode ausführen um die Daten auszulesen.a-dead-trousers hat geschrieben:Oder noch einfacher:
Alle Dateien des ZIP Archiv sollten im Attribut FILES nach dem LOAD drinnenstehen.
Ja, siehe auch meine PM.Trulchen hat geschrieben:Du meinst das ganze so machen?
http://wiki.sdn.sap.com/wiki/display/Sn ... ZIP+Folder
Code: Alles auswählen.
DATA lo_nd_file_upload TYPE REF TO if_wd_context_node.
DATA lo_el_file_upload TYPE REF TO if_wd_context_element.
DATA it_file_upload TYPE TABLE OF wd_this->Element_file_upload.
DATA lo_nd_tabfileinfo TYPE REF TO if_wd_context_node.
DATA it_tabfileinfo TYPE TABLE OF wd_this->Elements_tabfileinfo.
DATA lo_el_tabfileinfo TYPE REF TO if_wd_context_element.
DATA: obj_zip TYPE REF TO cl_abap_zip.
DATA it_file_zip TYPE TABLE OF wd_this->Element_file_upload.
DATA: ls_file_zip TYPE wd_this->Element_file_upload.
DATA: ls_files TYPE LINE OF obj_zip->t_files.
DATA: ls_file_upload TYPE wd_this->Element_file_upload.
* Get upload data from context
lo_nd_file_upload = wd_context->path_get_node( 'FILE_UPLOAD' ).
lo_el_file_upload = lo_nd_file_upload->get_element( ).
lo_el_file_upload->get_static_attributes( IMPORTING static_attributes = ls_file_upload ).
* Check if file is zipped
IF ls_file_upload-mimetype = 'application/x-zip-compressed'.
* Create ZIP object
CREATE OBJECT obj_zip.
* Unzip data
obj_zip->load( ls_file_upload-file_content ).
LOOP at obj_zip->files INTO ls_files.
append ls_file_zip to it_file_zip.
ls_file_zip-filename = ls_files-name.
obj_zip->get( EXPORTING name = ls_files-name
IMPORTING content = ls_file_zip-file_content
EXCEPTIONS zip_index_error = 1
zip_decompression_error = 2 ).
ls_file_zip-file_size = ls_files-size.
ENDLOOP.
ENDif.
lo_nd_file_upload->bind_table(
new_items = it_file_zip
set_initial_elements = abap_true
).