TYPES: BEGIN OF bin_file, " Typ für Binärdatei mit Meta-Infos für das Zipfile name TYPE string, size TYPE i, data TYPE solix_tab, END OF bin_file. DATA: lv_filename TYPE string. " Dateiname für FileOpen/FileSave DATA: wa_file TYPE bin_file. " Binärdatei mit Meta-Infos für das Zipfile DATA: it_binfiles TYPE STANDARD TABLE OF bin_file. " unkomprimierter Stream (Tabelle mit Dateien zum Zippen) DATA: lv_path TYPE string. START-OF-SELECTION. * ZIP-Objekt erzeugen DATA(o_zip) = NEW cl_abap_zip( ). DATA: it_sel_filetab TYPE filetable. DATA: ret_code TYPE i. DATA: lv_action TYPE i. * FileOpen-Dialog für Dateiauswahl anzeigen * Mehrfachselektion möglich cl_gui_frontend_services=>file_open_dialog( EXPORTING window_title = 'Dateien zum Komprimieren auswählen' multiselection = abap_true CHANGING file_table = it_sel_filetab rc = ret_code " Anzahl ausgewählte Dateien, -1 bei Fehler user_action = lv_action ). IF lv_action = cl_gui_frontend_services=>action_ok. * Ausgewählte Dateien durchgehen LOOP AT it_sel_filetab INTO DATA(wa_sel_file). WRITE: / |Datei hinzugefügt: { wa_sel_file-filename }|. * Dateien auf den Appl.-Server hochladen cl_gui_frontend_services=>gui_upload( EXPORTING filename = |{ wa_sel_file-filename }| filetype = 'BIN' IMPORTING filelength = wa_file-size CHANGING data_tab = wa_file-data ). * Pfad + Dateinamen aufsplitten CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH' EXPORTING full_name = wa_sel_file-filename IMPORTING file_path = lv_path stripped_name = wa_file-name EXCEPTIONS x_error = 1 OTHERS = 2. * Datei zum Stream hinzufügen APPEND wa_file TO it_binfiles. ENDLOOP. ULINE. DATA: lv_xstring TYPE xstring. * unkomprimierte Daten zum Zip-File hinzufügen LOOP AT it_binfiles INTO wa_file. * jeden Datei-Stream binär zu xstring wandeln CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = wa_file-size IMPORTING buffer = lv_xstring TABLES binary_tab = wa_file-data. o_zip->add( name = wa_file-name content = lv_xstring ). ENDLOOP. * Daten komprimieren DATA(lv_zip) = o_zip->save( ). DATA: lv_zip_size TYPE i. DATA: it_zip_bin_data TYPE STANDARD TABLE OF raw255. * xstring mit Zip-Daten zu binär rückwandeln CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_zip IMPORTING output_length = lv_zip_size TABLES binary_tab = it_zip_bin_data. DATA: lv_dest_filepath TYPE string. * SaveFile-Dialog aufrufen cl_gui_frontend_services=>file_save_dialog( EXPORTING window_title = 'Zipdatei speichern' file_filter = '(*.zip)|*.zip|' CHANGING filename = lv_filename path = lv_path fullpath = lv_dest_filepath ). * Zipdatei vom Appl-Server auf den lokalen Pfad speichern cl_gui_frontend_services=>gui_download( EXPORTING filename = lv_dest_filepath filetype = 'BIN' bin_filesize = lv_zip_size CHANGING data_tab = it_zip_bin_data ). IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. WRITE: / |Zipdatei erfolgreich unter { lv_dest_filepath } gespeichert.|. ENDIF. ENDIF.
Kategorien
-
Neueste Beiträge
- [ABAP] DMS: Infos zu Dokumenteninfosätzen lesen
- [ABAP] Prüfen, ob ein bestimmer Festwert in einer Domäne vorhanden ist
- [SAP] Drucker für Benutzer festlegen
- [SAP Fiori] Fiori Launchpad erweitern, Systeminformationen im Launchpad anzeigen
- [SAP Gateway] ODATA V4 Service für anonymen Zugriff einrichten
- [ABAP] Varianten eines Reports lesen
- Warum Krebspatienten so viel Gewicht verlieren
- [SAP Fiori] ABAP RESTful Application Programming Model (RAP)
- [SAP] Events und Typkoppelungen
- [SAP Gateway] Daten versenden über einen eventbasierten Aufruf einer OData-Funktion