CALL 'SYSTEM' scheint ja wirklich sehr beliebt zu sein.Jens hat geschrieben: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.
Code: Alles auswählen.
importing :
IMP_FILENAME TYPE STRING "der Name der Daten, IM Zipfile
IMP_ZIPFILENAME TYPE STRING "der Name des Zipfiles
IMP_TABLE TYPE TABLE "beliebige Tabelle
exporting :
RETC TYPE SYSUBRC
METHOD CREATE_ZIP_BIN.
*------------------------------------------------------------------------------*
* Änderungen ------------------------------------------------------------*
*------------------------------------------------------------------------------*
*------------------------------------------------------------------------------*
* K User Datum Grund *
*------------------------------------------------------------------------------*
*xxxxx wxxxxx yyyymmdd .......................................... *
*------------------------------------------------------------------------------*
DATA: ref_zip TYPE REF TO cl_abap_zip.
DATA: va_file_name TYPE string.
DATA: va_xstring TYPE xstring.
DATA: ex_xstring TYPE xstring.
FIELD-SYMBOLS <fs_rec> TYPE any.
FIELD-SYMBOLS <x> TYPE x.
CLEAR va_xstring.
retc = 0.
TRY.
* Convert to xstring
LOOP AT imp_table ASSIGNING <fs_rec>.
ASSIGN <fs_rec> TO <x> CASTING TYPE x.
CONCATENATE va_xstring <x> INTO va_xstring IN BYTE MODE.
ENDLOOP.
CATCH cx_root.
retc = 1.
RETURN.
ENDTRY.
IF va_xstring IS INITIAL.
retc = 4.
RETURN.
ENDIF.
* compress and create output file
TRY.
CREATE OBJECT ref_zip.
ref_zip->add( EXPORTING name = imp_filename
content = va_xstring
EXCEPTIONS OTHERS = 1 ).
ref_zip->save( RECEIVING zip = ex_xstring
EXCEPTIONS OTHERS = 1 ).
* Transfer to SAP Server
OPEN DATASET imp_zipfilename FOR OUTPUT IN BINARY MODE .
TRANSFER ex_xstring TO imp_zipfilename.
CLOSE DATASET imp_zipfilename.
CATCH cx_root.
retc = 2.
ENDTRY.
ENDMETHOD.
Beispiel (macht zwar wenig Sinn, veranschaulicht aber die Funktion):
FORM check_zip .
DATA it_mara TYPE TABLE OF mara.
DATA retc TYPE sy-subrc.
SELECT * FROM mara UP TO 10 ROWS
INTO TABLE it_mara.
z_cl_zip_tools=>create_zip_bin( EXPORTING imp_filename = 'MARA_TAB.BIN'
imp_zipfilename = '/usr/sap/mara_tab.zip'
imp_table = it_mara
IMPORTING retc = retc ).
ENDFORM. " CHECK_ZIP