Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

zipping

Former Member
0 Likes
905

Hello All,

I have a requirement where i need to zip a file using abap.

In selection screen i will give file path and name. Program has to zip that file and put the zip file in the same location.

Please help me in this regard.

Good answers will be appreciated.

Thanks in advance.

Best Regards,

Sasidhar Reddy Matli.

Hello All,

I have a requirement where i need to zip a file using abap.

In selection screen i will give file path and name. Program has to zip that file and put the zip file in the same location.

Please help me in this regard.

Good answers will be appreciated.

Thanks in advance.

Best Regards,

Sasidhar Reddy Matli.

4 REPLIES 4
Read only

Former Member
0 Likes
768

Hello,

The requirement is good but what is the use of compressing the file we have many 3rd pary software to compress the file then we can use that software.

Make your requirement clear............

Edited by: Santosh Marupally on Nov 5, 2008 6:34 AM

Read only

0 Likes
768

Hello Santhosh,

My requirement is to send spool output to SMTP-addresses like gmail, yahoo like that.

But in my company, there is restriction that we are not supposed to send mails which is more than 5MB. for this purpose i want to zip that file.

Any inputs please help me.

Thank you.

Best Regards,

Sasidhar Reddy Matli.

Read only

Former Member
0 Likes
768

Hi,

you can do this using function module ws_execute or gui_exec to call winzip or a similar program to compress in foreground....


Example code:

DATA: tp_text_in TYPE string,

tp_text_out TYPE xstring,

tp_zip_length TYPE i.

TRY.

tp_text_in = 'Dit is een tekststring die gezipped zal worden'.

cl_abap_gzip=>compress_text(

EXPORTING

text_in = tp_text_in

IMPORTING

gzip_out = tp_text_out

gzip_out_len = tp_zip_length

).

CATCH cx_parameter_invalid_range

.

CATCH cx_sy_buffer_overflow

.

CATCH cx_sy_conversion_codepage

.

CATCH cx_root.

ENDTRY. 

Arunima

Edited by: Arunima Rudra on Nov 5, 2008 11:26 AM

Read only

Former Member
0 Likes
768

Hello,

Try this you will get some idea

_____________________________

1) add the file into the zip file. cl_abap_zip->add.

2) save the zip file cl_abap_zip->save.

3) convert file into binary.

4) download the file with cl_gui_upload.

Anylize this code

__________________

TYPE-POOL zdata .

TYPES:

BEGIN OF zdata_t_splice_entry,

name TYPE string,

offset TYPE i,

length TYPE i,

compressed TYPE i,

END OF zdata_t_splice_entry .

TYPES:

zdata_t_splice_entries TYPE STANDARD TABLE OF zdata_t_splice_entry WITH DEFAULT KEY ,

BEGIN OF zdata_t_data,

data TYPE REF TO data,

xmlfile TYPE string,

END OF zdata_t_data,

zdata_t_data_entries type standard table of zdata_t_data.

2. Creation of Function Module ZDOWNLOAD_AND_ZIP_TO_XML

FUNCTION-POOL ZXML. "MESSAGE-ID ..

type-pools : ZDATA.

FUNCTION zdownload_and_zip_to_xml.

*"----


""Local Interface:

*" IMPORTING

*" REFERENCE(FULLPATH) TYPE STRING

*" REFERENCE(DOWNLOAD) TYPE XFELD DEFAULT 'X'

*" REFERENCE(UPLOAD) TYPE XFELD OPTIONAL

*" TABLES

*" IT_DATA TYPE ZDATA_T_DATA_ENTRIES

*" EXCEPTIONS

*" FILE_NOT_CREATED

*"----


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 zdata_t_data,

lt_splice_entries TYPE TABLE OF zdata_t_splice_entry,

lwa_splice_entries TYPE zdata_t_splice_entry,

l_filename TYPE string,

input_length TYPE i,

lv_index TYPE sytabix,

lwa_file TYPE zdata_t_data.

FIELD-SYMBOLS :

<gt_data> TYPE table,

<wa> TYPE ANY.

CREATE OBJECT izip.

IF download = 'X'.

*Download to XML File(s)

LOOP AT it_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 = fullpath

filetype = 'BIN'

CHANGING

data_tab = binary_tab ).

IF sy-subrc NE 0.

RAISE file_not_created.

ENDIF.

ELSE.

*Upload from XML File(s)

l_filename = fullpath.

CALL METHOD cl_gui_frontend_services=>gui_upload

EXPORTING

filetype = 'BIN'

filename = l_filename

IMPORTING

filelength = input_length

CHANGING

data_tab = binary_tab.

CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'

EXPORTING

input_length = input_length

IMPORTING

buffer = zip_file

TABLES

binary_tab = binary_tab.

CHECK binary_tab IS NOT INITIAL.

CLEAR : lt_splice_entries.

CALL METHOD cl_abap_zip=>splice

EXPORTING

zip = zip_file

RECEIVING

entries = lt_splice_entries.

izip->load( zip_file ).

IF LINES( lt_splice_entries ) GT 0.

LOOP AT lt_splice_entries INTO lwa_splice_entries.

lv_index = sy-tabix.

CLEAR : lwa_file.

READ TABLE it_data INTO lwa_file

WITH KEY xmlfile = lwa_splice_entries-name.

IF sy-subrc EQ 0.

CLEAR : data_line,ixml.

UNASSIGN : <gt_data>,<wa>.

ASSIGN lwa_file-data->* TO <gt_data>.

CREATE DATA data_line LIKE LINE OF <gt_data>.

ASSIGN data_line->* TO <wa>.

CALL METHOD izip->get

EXPORTING

name = lwa_splice_entries-name

IMPORTING

content = ixml

EXCEPTIONS

zip_index_error = 1

zip_decompression_error = 2

OTHERS = 3.

CALL TRANSFORMATION id

SOURCE XML ixml

RESULT <wa> = <gt_data>.

MODIFY it_data FROM lwa_file INDEX sy-tabix.

ENDIF.

ENDLOOP.

ENDIF.

ENDIF.

3. SAMPLE PROGRAM

REPORT zzip_xml.

TYPE-POOLS : zdata.

TYPES:

BEGIN OF t_makt,

counter TYPE i.

INCLUDE TYPE makt.

TYPES : END OF t_makt,

BEGIN OF t_tvkot,

counter TYPE i.

INCLUDE TYPE tvkot.

TYPES : END OF t_tvkot.

TYPES:

BEGIN OF t_splice_entry,

name TYPE string,

offset TYPE i,

length TYPE i,

compressed TYPE i,

END OF t_splice_entry .

TYPES:

t_splice_entries TYPE STANDARD TABLE OF t_splice_entry WITH DEFAULT KEY .

PARAMETERS : p_path TYPE string OBLIGATORY DEFAULT 'C:\',

p_down RADIOBUTTON GROUP r1 ,

p_up RADIOBUTTON GROUP r1.

DATA : stripped_name TYPE string,

file_path TYPE string,

gt_data TYPE zdata_t_data_entries,

wa_data TYPE zdata_t_data.

DATA retfiletable TYPE filetable.

DATA retrc TYPE sysubrc.

DATA retuseraction TYPE i.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.

IF p_down = 'X'.

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.

ELSE.

CALL METHOD cl_gui_frontend_services=>file_open_dialog

EXPORTING

multiselection = abap_false

file_filter = '*.zip'

default_extension = 'zip'

CHANGING

file_table = retfiletable

rc = retrc

user_action = retuseraction.

READ TABLE retfiletable INTO p_path INDEX 1.

ENDIF.

START-OF-SELECTION.

IF p_down = 'X'.

*Download to XML File

PERFORM create_zip_and_xml_files.

ELSE.

*Upload from XML File

PERFORM splice_xml_files.

ENDIF.

&----


*& Form create_zip_and_xml_files

&----


FORM create_zip_and_xml_files .

DATA :

lt_data TYPE STANDARD TABLE OF t_makt,

lwa_data TYPE t_makt,

lt_tvkot TYPE STANDARD TABLE OF t_tvkot,

lwa_tvkot TYPE t_tvkot,

lv_index TYPE sy-index,

lt_outtab TYPE REF TO data,

lt_tvkot_outtab TYPE REF TO data,

lwa_file TYPE zdata_t_data.

*Select some MAKT data

SELECT * FROM makt INTO CORRESPONDING FIELDS OF

TABLE lt_data UP TO 20 ROWS

WHERE spras = 'EN'.

LOOP AT lt_data INTO lwa_data.

lv_index = sy-tabix.

lwa_data-counter = lv_index.

MODIFY lt_data FROM lwa_data INDEX lv_index.

ENDLOOP.

IF LINES( lt_data ) GT 0.

*Get the internal table into data area

GET REFERENCE OF lt_data INTO lt_outtab.

ENDIF.

*Select some TVKO data

CLEAR : lv_index.

SELECT * FROM tvkot INTO CORRESPONDING FIELDS OF

TABLE lt_tvkot UP TO 20 ROWS

WHERE spras = 'EN'.

LOOP AT lt_tvkot INTO lwa_tvkot.

lv_index = sy-tabix.

lwa_tvkot-counter = lv_index.

MODIFY lt_tvkot FROM lwa_tvkot INDEX lv_index.

ENDLOOP.

IF LINES( lt_tvkot ) GT 0.

*Get the internal table into data area

GET REFERENCE OF lt_tvkot INTO lt_tvkot_outtab.

ENDIF.

*Add to data table

lwa_file-data = lt_outtab.

lwa_file-xmlfile = 'MAKT.XML'.

APPEND lwa_file TO gt_data.

lwa_file-data = lt_tvkot_outtab.

lwa_file-xmlfile = 'TVKOT.XML'.

APPEND lwa_file TO gt_data.

.

CALL FUNCTION 'ZDOWNLOAD_AND_ZIP_TO_XML'

EXPORTING

fullpath = p_path

download = 'X'

  • UPLOAD =

TABLES

it_data = gt_data

EXCEPTIONS

file_not_created = 1

OTHERS = 2

.

ENDFORM. " create_zip_and_xml_files

&----


*& Form splice_xml_files

&----


FORM splice_xml_files .

DATA binary_tab TYPE STANDARD TABLE OF x255.

DATA ixml TYPE xstring.

DATA izip TYPE REF TO cl_abap_zip.

DATA zip_file TYPE xstring.

DATA input_length TYPE i.

DATA : lt_splice_entries TYPE TABLE OF t_splice_entry,

lwa_splice_entries TYPE t_splice_entry,

lwa_file TYPE zdata_t_data,

lt_data TYPE STANDARD TABLE OF t_makt,

lt_tvkot TYPE STANDARD TABLE OF t_tvkot,

lt_outtab TYPE REF TO data,

lt_tvkot_outtab TYPE REF TO data,

data_line TYPE REF TO data,

lv_index TYPE sytabix,

lwa_data TYPE t_makt,

lwa_tvkot TYPE t_tvkot.

CLEAR gt_data.

*Get the internal table into data area

GET REFERENCE OF lt_data INTO lt_outtab.

lwa_file-data = lt_outtab.

lwa_file-xmlfile = 'MAKT.XML'.

APPEND lwa_file TO gt_data.

CLEAR lwa_file.

GET REFERENCE OF lt_tvkot INTO lt_tvkot_outtab.

lwa_file-data = lt_tvkot_outtab.

lwa_file-xmlfile = 'TVKOT.XML'.

APPEND lwa_file TO gt_data.

CLEAR lwa_file.

CALL FUNCTION 'ZDOWNLOAD_AND_ZIP_TO_XML'

EXPORTING

fullpath = p_path

download = space

upload = 'X'

TABLES

it_data = gt_data

EXCEPTIONS

file_not_created = 1

OTHERS = 2.

WRITE : 'MAKT Data----


'.

LOOP AT lt_data INTO lwa_data.

WRITE : / lwa_data-matnr.

ENDLOOP.

SKIP 5.

WRITE : / 'TVKO Data----


'.

LOOP AT lt_tvkot INTO lwa_tvkot.

WRITE : / lwa_tvkot-vkorg.

ENDLOOP.

ENDFORM. " splice_xml_files

https://www.sdn.sap.com/irj/sdn/forum?forumID=50

************************

Class

CL_ABAP_GZIP

https://www.sdn.sap.com/irj/sdn/thread?threadID=118474&tstart=0

https://www.sdn.sap.com/irj/sdn/wiki?path=/display/profile/GZIP

Try this procedures you will get some idea