rework "object to zip" to files

for cherry picking objects, without exporting the entire package

previous implementation was too slow, as it had to serialize the entire package, and just needed files for one object
This commit is contained in:
larshp 2016-10-25 19:37:55 +02:00
parent 0ca5363f25
commit 32cac9d00e
5 changed files with 92 additions and 29 deletions

View File

@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100.
* See http://www.abapgit.org
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.18.5'. "#EC NOTEXT
gc_abap_version TYPE string VALUE 'v1.18.6'. "#EC NOTEXT
********************************************************************************
* The MIT License (MIT)

View File

@ -104,9 +104,9 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
DATA ls_field LIKE LINE OF ct.
FIELD-SYMBOLS <src> TYPE any.
FIELD-SYMBOLS <src> TYPE any.
ls_field-name = name.
ls_field-name = name.
CASE cl_abap_typedescr=>describe_by_data( iv )->kind.
WHEN cl_abap_typedescr=>kind_elem.
@ -116,7 +116,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
ASSERT <src> IS ASSIGNED.
ls_field-value = <src>.
WHEN OTHERS.
ASSERT 2 = 1.
ASSERT 0 = 1.
ENDCASE.
APPEND ls_field TO ct.
@ -125,8 +125,8 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
METHOD get_field.
FIELD-SYMBOLS <ls_field> LIKE LINE OF it.
FIELD-SYMBOLS <dest> TYPE any.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF it,
<dest> TYPE any.
READ TABLE it ASSIGNING <ls_field> WITH KEY name = name.
@ -142,7 +142,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
ASSERT <dest> IS ASSIGNED.
<dest> = <ls_field>-value.
WHEN OTHERS.
ASSERT 2 = 1.
ASSERT 0 = 1.
ENDCASE.
ENDMETHOD. "get_field

View File

@ -83,7 +83,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
lcl_app=>user( )->set_repo_show( lv_key ).
TRY.
lcl_app=>repo_srv( )->get( lv_key )->refresh( ).
CATCH lcx_exception.
CATCH lcx_exception ##NO_HANDLER.
ENDTRY.
ev_state = gc_event_state-re_render.
@ -176,7 +176,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
lo_betasub->add( iv_txt = 'Database util' iv_act = gc_action-go_db ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Package to zip' iv_act = gc_action-zip_package ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Transport to zip' iv_act = gc_action-zip_transport ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Object to zip' iv_act = gc_action-zip_object ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Object to files' iv_act = gc_action-zip_object ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Page playground' iv_act = gc_action-go_playground ) ##NO_TEXT.
lo_betasub->add( iv_txt = 'Debug info' iv_act = gc_action-go_debuginfo ) ##NO_TEXT.

View File

@ -6,15 +6,15 @@ TABLES sscrfields.
SELECTION-SCREEN BEGIN OF SCREEN 1002 TITLE s_title.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) s_url FOR FIELD p_url.
PARAMETERS: p_url TYPE string LOWER CASE VISIBLE LENGTH 40.
PARAMETERS: p_url TYPE string LOWER CASE VISIBLE LENGTH 40 ##SEL_WRONG.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) s_user FOR FIELD p_user.
PARAMETERS: p_user TYPE string LOWER CASE VISIBLE LENGTH 40.
PARAMETERS: p_user TYPE string LOWER CASE VISIBLE LENGTH 40 ##SEL_WRONG.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) s_pass FOR FIELD p_pass.
PARAMETERS: p_pass TYPE string LOWER CASE VISIBLE LENGTH 40.
PARAMETERS: p_pass TYPE string LOWER CASE VISIBLE LENGTH 40 ##SEL_WRONG.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF SCREEN 1002.

View File

@ -27,12 +27,12 @@ CLASS lcl_zip DEFINITION FINAL.
PRIVATE SECTION.
CLASS-METHODS file_upload
RETURNING VALUE(rv_xstr) TYPE xstring
RETURNING value(rv_xstr) TYPE xstring
RAISING lcx_exception.
CLASS-METHODS unzip_file
IMPORTING iv_xstr TYPE xstring
RETURNING VALUE(rt_files) TYPE ty_files_tt
RETURNING value(rt_files) TYPE ty_files_tt
RAISING lcx_exception.
CLASS-METHODS normalize_path
@ -52,11 +52,11 @@ CLASS lcl_zip DEFINITION FINAL.
CLASS-METHODS encode_files
IMPORTING it_files TYPE ty_files_item_tt
RETURNING VALUE(rv_xstr) TYPE xstring
RETURNING value(rv_xstr) TYPE xstring
RAISING lcx_exception.
CLASS-METHODS get_message
RETURNING VALUE(rv_message) TYPE string
RETURNING value(rv_message) TYPE string
RAISING lcx_exception.
ENDCLASS. "lcl_zip DEFINITION
@ -337,7 +337,7 @@ CLASS lcl_zip IMPLEMENTATION.
ENDLOOP.
ENDIF.
ENDMETHOD.
ENDMETHOD. "normalize_path
METHOD unzip_file.
@ -460,10 +460,17 @@ CLASS lcl_zip IMPLEMENTATION.
METHOD export_object.
DATA: lo_repo TYPE REF TO lcl_repo_offline,
ls_data TYPE lcl_persistence_repo=>ty_repo,
lt_tadir TYPE scts_tadir,
ls_tadir TYPE tadir.
DATA: ls_tadir TYPE tadir,
ls_item TYPE ty_item,
lv_folder TYPE string,
lv_fullpath TYPE string,
lt_rawdata TYPE solix_tab,
lv_sep TYPE c LENGTH 1,
lt_files TYPE ty_files_tt.
STATICS: lv_prev TYPE string.
FIELD-SYMBOLS: <ls_file> LIKE LINE OF lt_files.
ls_tadir = lcl_popups=>popup_object( ).
@ -471,18 +478,74 @@ CLASS lcl_zip IMPLEMENTATION.
RAISE EXCEPTION TYPE lcx_cancel.
ENDIF.
ls_data-key = 'TZIP'.
ls_data-package = ls_tadir-devclass.
ls_data-master_language = sy-langu.
ls_item-obj_type = ls_tadir-object.
ls_item-obj_name = ls_tadir-obj_name.
CREATE OBJECT lo_repo
lt_files = lcl_objects=>serialize(
is_item = ls_item
iv_language = sy-langu ).
IF lines( lt_files ) = 0.
MESSAGE 'Empty' TYPE 'S'.
RETURN.
ENDIF.
cl_gui_frontend_services=>directory_browse(
EXPORTING
is_data = ls_data.
initial_folder = lv_prev
CHANGING
selected_folder = lv_folder ).
IF lv_folder IS INITIAL.
RETURN.
ENDIF.
APPEND ls_tadir TO lt_tadir.
lv_prev = lv_folder.
lcl_zip=>export( io_repo = lo_repo
it_filter = lt_tadir ).
cl_gui_frontend_services=>get_file_separator(
CHANGING
file_separator = lv_sep ).
LOOP AT lt_files ASSIGNING <ls_file>.
CONCATENATE lv_folder lv_sep <ls_file>-filename INTO lv_fullpath.
lt_rawdata = cl_bcs_convert=>xstring_to_solix( <ls_file>-data ).
cl_gui_frontend_services=>gui_download(
EXPORTING
bin_filesize = xstrlen( <ls_file>-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.
lcx_exception=>raise( 'error from gui_download' ).
ENDIF.
ENDLOOP.
ENDMETHOD. "export_package