11-18-2008 8:15 AM
Hello Gurus,
I understand to ZIP / UNZIP files we use the class CL_ABAP_ZIP. I browsed through SDN forums & came across many posts relating how to unzip/zip files. Unfortunately for me all these involved uploading files & then zipping them.
Can we not directly create a ZIP file from an internal table & download it? If yes, please guide me with this requirement.
BR,
Suhas
11-18-2008 9:14 AM
Hello Gurus,
I tried a small bit of code & the ZIP file is being downloaded. But i cannot open it. I was going through a post & found that SAP dowsnt support WINZIP.
Is this true? How can we view the contents of the file then ?
BR,
Suhas
11-18-2008 1:17 PM
Hi ...
Please the sample code...
REPORT ztest_subha_zip.
PARAMETERS : p_path TYPE string OBLIGATORY DEFAULT 'C:\'.
TYPES:
BEGIN OF x_splice_entry,
name TYPE string,
offset TYPE i,
length TYPE i,
compressed TYPE i,
END OF x_splice_entry ,
BEGIN OF x_mara,
matnr TYPE matnr,
END OF x_mara,
BEGIN OF x_t_data,
data TYPE REF TO data,
xmlfile TYPE string,
END OF x_t_data.
Internal table declaration
DATA: i_data TYPE STANDARD TABLE OF x_t_data,
i_mara TYPE STANDARD TABLE OF x_mara.
Work area declaration
DATA: wa_data TYPE x_t_data.
Variable declaration
DATA : stripped_name TYPE string,
file_path TYPE string,
retfiletable TYPE filetable,
retrc TYPE sysubrc,
retuseraction TYPE i.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = 'Downloaded ZIP File'
file_filter = '*.zip'
default_extension = 'zip'
CHANGING
filename = stripped_name
path = file_path
fullpath = p_path
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
START-OF-SELECTION.
*Download to XML File
PERFORM create_zip_and_xml_files.
Create zip file
PERFORM sub_create_zip_file.
&----
*& Form create_zip_and_xml_files
&----
FORM create_zip_and_xml_files .
DATA :
l_wa_mara TYPE x_mara,
lt_outtab TYPE REF TO data,
lt_tvkot_outtab TYPE REF TO data,
lwa_file TYPE x_t_data.
SELECT * FROM mara INTO CORRESPONDING FIELDS OF
TABLE i_mara UP TO 10 ROWS.
IF LINES( i_mara ) GT 0.
*Get the internal table into data area
GET REFERENCE OF i_mara INTO lt_outtab.
ENDIF.
*Add to data table
lwa_file-data = lt_outtab.
lwa_file-xmlfile = 'MARA.TXT'.
APPEND lwa_file TO i_data.
ENDFORM. " create_zip_and_xml_files
&----
*& Form SUB_CREATE_ZIP_FILE
&----
text
----
FORM sub_create_zip_file .
DATA :
data_line TYPE REF TO data,
ixml TYPE xstring,
xml TYPE string,
izip TYPE REF TO cl_abap_zip,
zip_file TYPE xstring,
binary_tab TYPE STANDARD TABLE OF x255,
lwa_data TYPE x_t_data,
lt_splice_entries TYPE TABLE OF x_splice_entry,
lwa_splice_entries TYPE x_splice_entry,
l_filename TYPE string,
input_length TYPE i,
lv_index TYPE sytabix,
lwa_file TYPE x_t_data.
FIELD-SYMBOLS :
<gt_data> TYPE table,
<wa> TYPE ANY.
CREATE OBJECT izip.
*Download to XML File(s)
LOOP AT i_data INTO lwa_data.
CLEAR : data_line,zip_file,binary_tab[],ixml,xml.
UNASSIGN : <gt_data>,<wa>.
ASSIGN lwa_data-data->* TO <gt_data>.
CREATE DATA data_line LIKE LINE OF <gt_data>.
ASSIGN data_line->* TO <wa>.
*Create the XML Transformation
CALL TRANSFORMATION id
SOURCE <wa> = <gt_data>
RESULT XML ixml.
izip->add( name = lwa_data-xmlfile
content = ixml ).
ENDLOOP.
*Create a new zip file
zip_file = izip->save( ).
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = zip_file
TABLES
binary_tab = binary_tab.
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = p_path
filetype = 'BIN'
CHANGING
data_tab = binary_tab ). "i_tab2 ).
IF sy-subrc NE 0.
RAISE file_not_created.
ENDIF.
ENDFORM. " SUB_CREATE_ZIP_FILE
11-19-2008 11:11 AM
Hello Subhankar,
The ZIP file is being created but the file has crap contentcontents. I am trying to view the ZIP using WINZIP.
BR,
Suhas