mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 21:08:01 +08:00

* Add new methods directory_create and directory_exis * clean up whitespace * normalize whitespace, formatting, comments * decouple direct usage of cl_gui_frontend_services * downport + concatenate to string template * move param to single line Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com> Co-authored-by: Lars Hvam <larshp@hotmail.com>
222 lines
5.8 KiB
ABAP
222 lines
5.8 KiB
ABAP
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
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
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,
|
|
lo_fe_serv TYPE REF TO zif_abapgit_frontend_services.
|
|
|
|
lo_fe_serv = zcl_abapgit_ui_factory=>get_frontend_services( ).
|
|
lv_title = 'Choose the destination folder for the ZIP files'.
|
|
|
|
lo_fe_serv->directory_browse(
|
|
EXPORTING
|
|
iv_window_title = lv_title
|
|
iv_initial_folder = gv_last_folder
|
|
CHANGING
|
|
cv_selected_folder = rv_folder ).
|
|
|
|
"Store the last directory for user friendly UI
|
|
gv_last_folder = rv_folder.
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD open_folder_frontend.
|
|
IF iv_folder IS INITIAL.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
zcl_abapgit_ui_factory=>get_frontend_services( )->execute( iv_document = iv_folder ).
|
|
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.
|
|
TYPES ty_folder TYPE string.
|
|
TYPES ty_filename TYPE string.
|
|
|
|
CONSTANTS c_zip_ext TYPE string VALUE '.zip'.
|
|
|
|
METHODS constructor
|
|
IMPORTING
|
|
iv_folder TYPE ty_folder
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
METHODS generate_files
|
|
IMPORTING
|
|
it_trkorr TYPE trwbo_request_headers
|
|
ig_logic TYPE any
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
METHODS get_folder
|
|
RETURNING
|
|
VALUE(rv_full_folder) TYPE ty_folder.
|
|
|
|
CLASS-METHODS does_folder_exist
|
|
IMPORTING
|
|
iv_folder TYPE string
|
|
RETURNING
|
|
VALUE(rv_folder_exist) TYPE abap_bool
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
PRIVATE SECTION.
|
|
DATA: mv_timestamp TYPE string,
|
|
mv_separator TYPE c,
|
|
mv_full_folder TYPE ty_folder.
|
|
|
|
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.
|
|
DATA lo_fe_serv TYPE REF TO zif_abapgit_frontend_services.
|
|
|
|
lo_fe_serv = zcl_abapgit_ui_factory=>get_frontend_services( ).
|
|
|
|
mv_timestamp = |{ sy-datlo }_{ sy-timlo }|.
|
|
mv_full_folder = get_full_folder( iv_folder ).
|
|
|
|
TRY.
|
|
lo_fe_serv->get_file_separator( CHANGING cv_file_separator = mv_separator ).
|
|
CATCH zcx_abapgit_exception.
|
|
"Default MS Windows separator
|
|
mv_separator = '\'.
|
|
ENDTRY.
|
|
ENDMETHOD.
|
|
|
|
METHOD get_folder.
|
|
rv_full_folder = mv_full_folder.
|
|
ENDMETHOD.
|
|
|
|
METHOD does_folder_exist.
|
|
rv_folder_exist = zcl_abapgit_ui_factory=>get_frontend_services( )->directory_exist( iv_directory = iv_folder ).
|
|
ENDMETHOD.
|
|
|
|
METHOD get_full_folder.
|
|
|
|
DATA: lv_sep TYPE c,
|
|
lv_rc TYPE i,
|
|
lo_fe_serv TYPE REF TO zif_abapgit_frontend_services.
|
|
|
|
lo_fe_serv = zcl_abapgit_ui_factory=>get_frontend_services( ).
|
|
|
|
lo_fe_serv->get_file_separator( CHANGING cv_file_separator = lv_sep ).
|
|
rv_full_folder = |{ iv_folder }{ lv_sep }{ mv_timestamp }|.
|
|
|
|
IF does_folder_exist( rv_full_folder ) = abap_false.
|
|
lo_fe_serv->directory_create(
|
|
EXPORTING
|
|
iv_directory = rv_full_folder
|
|
CHANGING
|
|
cv_rc = lv_rc ).
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD get_filename.
|
|
|
|
" Generate filename
|
|
rv_filename = |{ is_trkorr-trkorr }_{ is_trkorr-as4text }_{ mv_timestamp }{ c_zip_ext }|.
|
|
|
|
" Remove reserved characters (for Windows based systems)
|
|
TRANSLATE rv_filename USING '/ \ : " * > < ? | '.
|
|
|
|
rv_filename = |{ mv_full_folder }{ mv_separator }{ rv_filename }|.
|
|
|
|
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 = ig_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.
|
|
|
|
ENDMETHOD.
|
|
|
|
ENDCLASS.
|