From 84042f1370003b2917deda2dcfaf499215efb3b7 Mon Sep 17 00:00:00 2001
From: Thomas B <49310055+kwaishang@users.noreply.github.com>
Date: Tue, 11 Jun 2019 17:57:08 +0200
Subject: [PATCH] Enhance 'Transport to ZIP' to process multiple transport
requests (#2683)
* New Program : Mass Transport to local zip file
Create new program ZMASSGIT in order to convert multiple tranport request to local zip files ( by giving output folder ).
Timestamped subfolder will be created in the input folder.
* Add files via upload
* Update zmassgit.prog.abap
* Add files via upload
* Add files via upload
* Delete zmassgit.prog.xml
* Delete zmassgit.prog.abap
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Delete zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipf01.abap
* Delete zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipf01.xml
* Delete zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipplc.abap
* Delete zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipplc.xml
* Delete zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipscr.abap
* Rename zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipscr.xml to src/zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipscr.xml
* Rename zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2ziptop.abap to src/zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2ziptop.abap
* Rename zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2ziptop.xml to src/zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2ziptop.xml
* Rename zabapgit_masstransp2zip.fugr.saplzabapgit_masstransp2zip.abap to src/zabapgit_masstransp2zip.fugr.saplzabapgit_masstransp2zip.abap
* Rename zabapgit_masstransp2zip.fugr.saplzabapgit_masstransp2zip.xml to src/zabapgit_masstransp2zip.fugr.saplzabapgit_masstransp2zip.xml
* Rename zabapgit_masstransp2zip.fugr.xml to src/zabapgit_masstransp2zip.fugr.xml
* Rename zabapgit_masstransp2zip.fugr.z_abapgit_transports_2_zip.abap to src/zabapgit_masstransp2zip.fugr.z_abapgit_transports_2_zip.abap
* Rename zcl_abapgit_transport_mass.clas.abap to src/zcl_abapgit_transport_mass.clas.abap
* Rename zcl_abapgit_transport_mass.clas.xml to src/zcl_abapgit_transport_mass.clas.xml
* Delete zcl_abapgit_zip.clas.abap
* Delete zcl_abapgit_zip.clas.xml
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Update zcl_abapgit_zip.clas.abap
* Update zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipf01.abap
* Update zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipf01.abap
* Update zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipf01.abap
* Update zcl_abapgit_transport_mass.clas.xml
* Update zcl_abapgit_transport_mass.clas.abap
* Update zabapgit_masstransp2zip.fugr.saplzabapgit_masstransp2zip.abap
* Update zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipplc.abap
* Update zabapgit_masstransp2zip.fugr.saplzabapgit_masstransp2zip.xml
* Update zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipplc.abap
* Update zabapgit_masstransp2zip.fugr.lzabapgit_masstransp2zipplc.abap
* Update zabapgit_masstransp2zip.fugr.saplzabapgit_masstransp2zip.abap
* New version without function group
* Cleanup
* Abaplint
* AbapLint Fixes
* Remove plugins objects from master
* Skip log flag in ZIP export
* Popup to ask the Export logic ( FULL / PREFIX ..)
* line length for abaplint
* Refactoring of code
Avoid redundancy of code and remove unused constant.
* Reduce line 50 length for abaplint ( < 120 )
* Change by the review of code
Refactoring of code
* AbapLint Fix
---
src/ui/zcl_abapgit_gui_router.clas.abap | 6 +-
src/zcl_abapgit_transport.clas.abap | 28 +-
src/zcl_abapgit_transport_mass.clas.abap | 69 +++++
...bapgit_transport_mass.clas.locals_imp.abap | 263 ++++++++++++++++++
src/zcl_abapgit_transport_mass.clas.xml | 16 ++
src/zcl_abapgit_zip.clas.abap | 98 ++++---
6 files changed, 428 insertions(+), 52 deletions(-)
create mode 100644 src/zcl_abapgit_transport_mass.clas.abap
create mode 100644 src/zcl_abapgit_transport_mass.clas.locals_imp.abap
create mode 100644 src/zcl_abapgit_transport_mass.clas.xml
diff --git a/src/ui/zcl_abapgit_gui_router.clas.abap b/src/ui/zcl_abapgit_gui_router.clas.abap
index 071dd8145..1bd502246 100644
--- a/src/ui/zcl_abapgit_gui_router.clas.abap
+++ b/src/ui/zcl_abapgit_gui_router.clas.abap
@@ -647,10 +647,8 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
file_download( iv_package = lv_package
iv_xstr = lv_xstr ).
ev_state = zcl_abapgit_gui=>c_event_state-no_more_act.
- WHEN zif_abapgit_definitions=>c_action-zip_transport. " Export transport as ZIP
- lv_xstr = zcl_abapgit_transport=>zip( ).
- file_download( iv_package = 'TRANSPORT'
- iv_xstr = lv_xstr ).
+ WHEN zif_abapgit_definitions=>c_action-zip_transport. " Export transports as ZIP
+ zcl_abapgit_transport_mass=>run( ).
ev_state = zcl_abapgit_gui=>c_event_state-no_more_act.
WHEN zif_abapgit_definitions=>c_action-zip_object. " Export object as ZIP
zcl_abapgit_zip=>export_object( ).
diff --git a/src/zcl_abapgit_transport.clas.abap b/src/zcl_abapgit_transport.clas.abap
index 8b05ce20b..f1d5975fb 100644
--- a/src/zcl_abapgit_transport.clas.abap
+++ b/src/zcl_abapgit_transport.clas.abap
@@ -1,13 +1,16 @@
CLASS zcl_abapgit_transport DEFINITION
PUBLIC
- FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS zip
+ IMPORTING
+ !iv_show_log_popup TYPE abap_bool DEFAULT abap_true
+ !iv_logic TYPE string OPTIONAL
+ !is_trkorr TYPE trwbo_request_header OPTIONAL
RETURNING
- VALUE(rv_xstr) TYPE xstring
+ VALUE(rv_xstr) TYPE xstring
RAISING
zcx_abapgit_exception .
CLASS-METHODS to_tadir
@@ -17,7 +20,7 @@ CLASS zcl_abapgit_transport DEFINITION
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
- PRIVATE SECTION.
+ PROTECTED SECTION.
CLASS-METHODS read_requests
IMPORTING
@@ -38,6 +41,7 @@ CLASS zcl_abapgit_transport DEFINITION
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
zcx_abapgit_exception .
+ PRIVATE SECTION.
ENDCLASS.
@@ -168,7 +172,12 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
lt_trkorr TYPE trwbo_request_headers.
- lt_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_transports( ).
+ IF is_trkorr IS SUPPLIED.
+ APPEND is_trkorr TO lt_trkorr.
+ ELSE.
+ lt_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_transports( ).
+ ENDIF.
+
IF lines( lt_trkorr ) = 0.
RETURN.
ENDIF.
@@ -188,15 +197,20 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
ls_data-package = lv_package.
ls_data-dot_abapgit = zcl_abapgit_dot_abapgit=>build_default( )->get_data( ).
- ls_data-dot_abapgit-folder_logic = zcl_abapgit_ui_factory=>get_popups( )->popup_folder_logic( ).
+ IF iv_logic IS SUPPLIED AND iv_logic IS NOT INITIAL.
+ ls_data-dot_abapgit-folder_logic = iv_logic.
+ ELSE.
+ ls_data-dot_abapgit-folder_logic = zcl_abapgit_ui_factory=>get_popups( )->popup_folder_logic( ).
+ ENDIF.
CREATE OBJECT lo_repo
EXPORTING
is_data = ls_data.
rv_xstr = zcl_abapgit_zip=>export(
- io_repo = lo_repo
- it_filter = lt_tadir ).
+ io_repo = lo_repo
+ it_filter = lt_tadir
+ iv_show_log = iv_show_log_popup ).
ENDMETHOD.
ENDCLASS.
diff --git a/src/zcl_abapgit_transport_mass.clas.abap b/src/zcl_abapgit_transport_mass.clas.abap
new file mode 100644
index 000000000..f27294110
--- /dev/null
+++ b/src/zcl_abapgit_transport_mass.clas.abap
@@ -0,0 +1,69 @@
+CLASS zcl_abapgit_transport_mass DEFINITION
+ PUBLIC
+ INHERITING FROM zcl_abapgit_transport
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS run .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+
+
+
+CLASS ZCL_ABAPGIT_TRANSPORT_MASS IMPLEMENTATION.
+
+
+ METHOD run.
+
+ DATA:
+ lt_trkorr TYPE trwbo_request_headers.
+
+ DATA:
+ lo_transport_zipper TYPE REF TO lcl_transport_zipper,
+ lo_except TYPE REF TO cx_root,
+ lv_folder TYPE string.
+
+ TRY.
+
+ lt_trkorr = lcl_gui=>select_tr_requests( ).
+
+ IF lt_trkorr[] IS NOT INITIAL.
+
+ lv_folder = lcl_gui=>f4_folder( ).
+
+ IF lv_folder IS INITIAL.
+* Empty folder
+ zcx_abapgit_exception=>raise( 'Empty destination folder' ).
+ ENDIF.
+
+* Instantiate transport zipper object that will also create the timestamped output folder
+ CREATE OBJECT lo_transport_zipper TYPE lcl_transport_zipper
+ EXPORTING
+ iv_folder = lv_folder.
+
+* Generate the local zip files from the given list of transport requests
+ lo_transport_zipper->generate_files(
+ it_trkorr = lt_trkorr
+ iv_logic = zcl_abapgit_ui_factory=>get_popups( )->popup_folder_logic( ) ).
+
+* Open output folder if user asked it
+ lcl_gui=>open_folder_frontend( lo_transport_zipper->gv_full_folder ).
+
+ ELSE.
+* No data found for the provided selection criterias
+ zcx_abapgit_exception=>raise( 'No transport requests selected' ).
+ ENDIF.
+
+ CATCH cx_wrong_data
+ zcx_abapgit_exception INTO lo_except.
+
+ MESSAGE lo_except->get_text( ) TYPE 'S' DISPLAY LIKE 'E'.
+
+ ENDTRY.
+
+ ENDMETHOD.
+ENDCLASS.
diff --git a/src/zcl_abapgit_transport_mass.clas.locals_imp.abap b/src/zcl_abapgit_transport_mass.clas.locals_imp.abap
new file mode 100644
index 000000000..38f54c67b
--- /dev/null
+++ b/src/zcl_abapgit_transport_mass.clas.locals_imp.abap
@@ -0,0 +1,263 @@
+CLASS lcl_gui DEFINITION FINAL.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS f4_folder RETURNING VALUE(rv_folder) TYPE string RAISING zcx_abapgit_exception.
+ CLASS-METHODS open_folder_frontend IMPORTING iv_folder TYPE string.
+ CLASS-METHODS select_tr_requests RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers.
+
+ PRIVATE SECTION.
+ CLASS-DATA: gv_last_folder TYPE string.
+
+ENDCLASS.
+
+CLASS lcl_gui IMPLEMENTATION.
+
+ METHOD f4_folder.
+
+ DATA: lv_title TYPE string.
+
+ lv_title = 'Choose the destination folder for the ZIP files'.
+
+ cl_gui_frontend_services=>directory_browse(
+ EXPORTING
+ window_title = lv_title
+ initial_folder = gv_last_folder
+ CHANGING
+ selected_folder = rv_folder
+ EXCEPTIONS
+ cntl_error = 1
+ error_no_gui = 2
+ not_supported_by_gui = 3
+ OTHERS = 4 ).
+
+ IF sy-subrc = 0.
+ gv_last_folder = rv_folder. "Store the last directory for user friendly UI
+ ELSE.
+ zcx_abapgit_exception=>raise( 'Folder matchcode exception' ).
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD open_folder_frontend.
+
+ IF NOT iv_folder IS INITIAL.
+
+ cl_gui_frontend_services=>execute(
+ EXPORTING
+ document = iv_folder
+ EXCEPTIONS
+ cntl_error = 1
+ error_no_gui = 2
+ bad_parameter = 3
+ file_not_found = 4
+ path_not_found = 5
+ file_extension_unknown = 6
+ error_execute_failed = 7
+ OTHERS = 8 ).
+ IF sy-subrc <> 0.
+ MESSAGE 'Problem when opening output folder' TYPE 'S' DISPLAY LIKE 'E'.
+ ENDIF.
+
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD select_tr_requests.
+
+ DATA: ls_popup TYPE strhi_popup,
+ ls_selection TYPE trwbo_selection.
+
+ ls_popup-start_column = 5.
+ ls_popup-start_row = 5.
+
+*- Prepare the selection ----------------------------------------------*
+ ls_selection-trkorrpattern = space.
+ ls_selection-client = space.
+ ls_selection-stdrequest = space.
+ ls_selection-reqfunctions = 'K'.
+ ls_selection-reqstatus = 'RNODL'.
+
+*- Call transport selection popup -------------------------------------*
+ CALL FUNCTION 'TRINT_SELECT_REQUESTS'
+ EXPORTING
+ iv_username_pattern = '*'
+ iv_via_selscreen = 'X'
+ is_selection = ls_selection
+ iv_complete_projects = space
+ iv_title = 'ABAPGit Transport Mass Downloader'
+ is_popup = ls_popup
+ IMPORTING
+ et_requests = rt_trkorr
+ EXCEPTIONS
+ action_aborted_by_user = 1
+ OTHERS = 2.
+ IF sy-subrc <> 0.
+ CLEAR rt_trkorr.
+ ELSE.
+ SORT rt_trkorr BY trkorr.
+ DELETE ADJACENT DUPLICATES FROM rt_trkorr COMPARING trkorr.
+ ENDIF.
+
+ ENDMETHOD.
+
+ENDCLASS.
+
+CLASS lcl_transport_zipper DEFINITION FINAL.
+
+ PUBLIC SECTION.
+* Folder
+ TYPES ty_folder TYPE string.
+* Filename
+ TYPES ty_filename TYPE string.
+
+* File extension
+ CONSTANTS gc_zip_ext TYPE string VALUE '.zip' ##NO_TEXT.
+
+ DATA: gv_timestamp TYPE string,
+ gv_separator TYPE c,
+ gv_full_folder TYPE ty_folder READ-ONLY.
+
+ METHODS constructor IMPORTING iv_folder TYPE ty_folder
+ RAISING zcx_abapgit_exception.
+
+ METHODS generate_files IMPORTING it_trkorr TYPE trwbo_request_headers
+ iv_logic TYPE any
+ RAISING zcx_abapgit_exception.
+
+ CLASS-METHODS does_folder_exist IMPORTING iv_folder TYPE string
+ RETURNING VALUE(rv_folder_exist) TYPE abap_bool
+ RAISING zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+
+ METHODS get_full_folder IMPORTING iv_folder TYPE ty_folder
+ RETURNING VALUE(rv_full_folder) TYPE ty_folder
+ RAISING zcx_abapgit_exception.
+
+ METHODS get_filename IMPORTING is_trkorr TYPE trwbo_request_header
+ RETURNING VALUE(rv_filename) TYPE ty_filename.
+
+ENDCLASS.
+
+CLASS lcl_transport_zipper IMPLEMENTATION.
+
+ METHOD constructor.
+
+ CONCATENATE sy-datlo sy-timlo INTO me->gv_timestamp SEPARATED BY '_'.
+
+ me->gv_full_folder = get_full_folder( iv_folder = iv_folder ).
+
+ cl_gui_frontend_services=>get_file_separator(
+ CHANGING
+ file_separator = gv_separator
+ EXCEPTIONS
+ cntl_error = 1
+ error_no_gui = 2
+ not_supported_by_gui = 3
+ OTHERS = 4 ).
+ IF sy-subrc <> 0.
+ gv_separator = '\'. "Default MS Windows separator
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD does_folder_exist.
+
+ cl_gui_frontend_services=>directory_exist(
+ EXPORTING
+ directory = iv_folder
+ RECEIVING
+ result = rv_folder_exist
+ EXCEPTIONS
+ cntl_error = 1
+ error_no_gui = 2
+ wrong_parameter = 3
+ not_supported_by_gui = 4
+ OTHERS = 5 ).
+ IF sy-subrc <> 0.
+ zcx_abapgit_exception=>raise( 'Error from cl_gui_frontend_services=>directory_exist' ).
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD get_full_folder.
+
+ DATA: lv_sep TYPE c,
+ lv_rc TYPE i.
+
+*-obtain file separator character---------------------------------------
+ cl_gui_frontend_services=>get_file_separator(
+ CHANGING
+ file_separator = lv_sep
+ EXCEPTIONS
+ cntl_error = 1
+ error_no_gui = 2
+ not_supported_by_gui = 3
+ OTHERS = 4 ).
+ IF sy-subrc <> 0.
+ zcx_abapgit_exception=>raise( 'Internal error getting file separator' ).
+ ENDIF.
+
+ CONCATENATE iv_folder
+ gv_timestamp
+ INTO rv_full_folder SEPARATED BY lv_sep.
+
+ IF does_folder_exist( iv_folder = rv_full_folder ) = abap_false.
+
+ cl_gui_frontend_services=>directory_create(
+ EXPORTING
+ directory = rv_full_folder
+ CHANGING
+ rc = lv_rc " Return Code
+ EXCEPTIONS
+ directory_create_failed = 1
+ cntl_error = 2
+ error_no_gui = 3
+ directory_access_denied = 4
+ directory_already_exists = 5
+ path_not_found = 6
+ unknown_error = 7
+ not_supported_by_gui = 8
+ wrong_parameter = 9
+ OTHERS = 10 ).
+ IF sy-subrc <> 0 AND sy-subrc <> 5.
+ zcx_abapgit_exception=>raise( 'Error from cl_gui_frontend_services=>directory_create' ).
+ ENDIF.
+
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD get_filename .
+
+* Generate filename
+ CONCATENATE is_trkorr-trkorr '_' is_trkorr-as4text '_' gv_timestamp gc_zip_ext
+ INTO rv_filename.
+
+* Remove reserved characters (for Windows based systems)
+ TRANSLATE rv_filename USING '/ \ : " * > < ? | '.
+
+ CONCATENATE gv_full_folder rv_filename INTO rv_filename SEPARATED BY gv_separator.
+
+ ENDMETHOD.
+
+ METHOD generate_files.
+
+ DATA: ls_trkorr LIKE LINE OF it_trkorr,
+ lv_zipbinstring TYPE xstring.
+
+ LOOP AT it_trkorr INTO ls_trkorr.
+
+ lv_zipbinstring = zcl_abapgit_transport_mass=>zip( is_trkorr = ls_trkorr
+ iv_logic = iv_logic
+ iv_show_log_popup = abap_false ).
+
+ zcl_abapgit_zip=>save_binstring_to_localfile( iv_binstring = lv_zipbinstring
+ iv_filename = get_filename( ls_trkorr ) ).
+
+ ENDLOOP. "it_trkorr
+
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/zcl_abapgit_transport_mass.clas.xml b/src/zcl_abapgit_transport_mass.clas.xml
new file mode 100644
index 000000000..4aaf10e54
--- /dev/null
+++ b/src/zcl_abapgit_transport_mass.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ ZCL_ABAPGIT_TRANSPORT_MASS
+ E
+ Mass Transport to ZIP
+ 1
+ X
+ X
+ X
+
+
+
+
diff --git a/src/zcl_abapgit_zip.clas.abap b/src/zcl_abapgit_zip.clas.abap
index db8448984..675e1ffc3 100644
--- a/src/zcl_abapgit_zip.clas.abap
+++ b/src/zcl_abapgit_zip.clas.abap
@@ -7,6 +7,7 @@ CLASS zcl_abapgit_zip DEFINITION
CLASS-METHODS export
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo
+ !iv_show_log TYPE abap_bool DEFAULT abap_true
!it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt OPTIONAL
RETURNING
VALUE(rv_xstr) TYPE xstring
@@ -14,13 +15,13 @@ CLASS zcl_abapgit_zip DEFINITION
zcx_abapgit_exception .
CLASS-METHODS export_object
RAISING
- zcx_abapgit_exception.
+ zcx_abapgit_exception .
CLASS-METHODS export_package
EXPORTING
!ev_xstr TYPE xstring
!ev_package TYPE devclass
RAISING
- zcx_abapgit_exception.
+ zcx_abapgit_exception .
CLASS-METHODS load
IMPORTING
!iv_xstr TYPE xstring
@@ -28,6 +29,11 @@ CLASS zcl_abapgit_zip DEFINITION
VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_tt
RAISING
zcx_abapgit_exception .
+ CLASS-METHODS save_binstring_to_localfile
+ IMPORTING iv_filename TYPE string
+ iv_binstring TYPE xstring
+ RAISING zcx_abapgit_exception.
+
PROTECTED SECTION.
PRIVATE SECTION.
@@ -50,7 +56,7 @@ CLASS zcl_abapgit_zip DEFINITION
CHANGING
!ct_files TYPE zif_abapgit_definitions=>ty_files_tt
RAISING
- zcx_abapgit_exception .
+ zcx_abapgit_exception.
CLASS-METHODS unzip_file
IMPORTING
!iv_xstr TYPE xstring
@@ -104,7 +110,7 @@ CLASS ZCL_ABAPGIT_ZIP IMPLEMENTATION.
lt_zip = io_repo->get_files_local( ii_log = li_log
it_filter = it_filter ).
- IF li_log->count( ) > 0.
+ IF li_log->count( ) > 0 AND iv_show_log = abap_true.
zcl_abapgit_log_viewer=>show_log( iv_header_text = 'Zip Export Log'
ii_log = li_log ).
ENDIF.
@@ -119,7 +125,6 @@ CLASS ZCL_ABAPGIT_ZIP IMPLEMENTATION.
DATA: ls_tadir TYPE zif_abapgit_definitions=>ty_tadir,
lv_folder TYPE string,
lv_fullpath TYPE string,
- lt_rawdata TYPE solix_tab,
lv_sep TYPE c LENGTH 1,
ls_files_item TYPE zcl_abapgit_objects=>ty_serialization.
@@ -162,43 +167,9 @@ CLASS ZCL_ABAPGIT_ZIP IMPLEMENTATION.
LOOP AT ls_files_item-files ASSIGNING .
CONCATENATE lv_folder lv_sep -filename INTO lv_fullpath.
- lt_rawdata = cl_bcs_convert=>xstring_to_solix( -data ).
+ save_binstring_to_localfile( iv_filename = lv_fullpath
+ iv_binstring = -data ).
- cl_gui_frontend_services=>gui_download(
- EXPORTING
- bin_filesize = xstrlen( -data )
- filename = lv_fullpath
- filetype = 'BIN'
- CHANGING
- data_tab = lt_rawdata
- EXCEPTIONS
- file_write_error = 1
- no_batch = 2
- gui_refuse_filetransfer = 3
- invalid_type = 4
- no_authority = 5
- unknown_error = 6
- header_not_allowed = 7
- separator_not_allowed = 8
- filesize_not_allowed = 9
- header_too_long = 10
- dp_error_create = 11
- dp_error_send = 12
- dp_error_write = 13
- unknown_dp_error = 14
- access_denied = 15
- dp_out_of_memory = 16
- disk_full = 17
- dp_timeout = 18
- file_not_found = 19
- dataprovider_exception = 20
- control_flush_error = 21
- not_supported_by_gui = 22
- error_no_gui = 23
- OTHERS = 24 ).
- IF sy-subrc <> 0.
- zcx_abapgit_exception=>raise( 'error from gui_download' ).
- ENDIF.
ENDLOOP.
ENDMETHOD.
@@ -305,6 +276,51 @@ CLASS ZCL_ABAPGIT_ZIP IMPLEMENTATION.
ENDMETHOD.
+ METHOD save_binstring_to_localfile.
+
+ DATA lt_rawdata TYPE solix_tab.
+
+ lt_rawdata = cl_bcs_convert=>xstring_to_solix( iv_binstring ).
+
+ cl_gui_frontend_services=>gui_download(
+ EXPORTING
+ bin_filesize = xstrlen( iv_binstring )
+ filename = iv_filename
+ filetype = 'BIN'
+ CHANGING
+ data_tab = lt_rawdata
+ EXCEPTIONS
+ file_write_error = 1
+ no_batch = 2
+ gui_refuse_filetransfer = 3
+ invalid_type = 4
+ no_authority = 5
+ unknown_error = 6
+ header_not_allowed = 7
+ separator_not_allowed = 8
+ filesize_not_allowed = 9
+ header_too_long = 10
+ dp_error_create = 11
+ dp_error_send = 12
+ dp_error_write = 13
+ unknown_dp_error = 14
+ access_denied = 15
+ dp_out_of_memory = 16
+ disk_full = 17
+ dp_timeout = 18
+ file_not_found = 19
+ dataprovider_exception = 20
+ control_flush_error = 21
+ not_supported_by_gui = 22
+ error_no_gui = 23
+ OTHERS = 24 ).
+ IF sy-subrc <> 0.
+ zcx_abapgit_exception=>raise( 'error from gui_download' ).
+ ENDIF.
+
+ ENDMETHOD.
+
+
METHOD unzip_file.
DATA: lo_zip TYPE REF TO cl_abap_zip,