Decouple last direct usage of CL_GUI_FRONTEND_SERVICES (#5145)

* 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>
This commit is contained in:
g-back 2021-11-23 15:09:38 +01:00 committed by GitHub
parent 928300a5c2
commit 510441d486
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 142 additions and 132 deletions

View File

@ -1,13 +1,21 @@
CLASS lcl_gui DEFINITION FINAL. CLASS lcl_gui DEFINITION FINAL.
PUBLIC SECTION. PUBLIC SECTION.
CLASS-METHODS f4_folder
CLASS-METHODS f4_folder RETURNING VALUE(rv_folder) TYPE string RAISING zcx_abapgit_exception. RETURNING
CLASS-METHODS open_folder_frontend IMPORTING iv_folder TYPE string. VALUE(rv_folder) TYPE string
CLASS-METHODS select_tr_requests RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers. 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. PRIVATE SECTION.
CLASS-DATA: gv_last_folder TYPE string. CLASS-DATA gv_last_folder TYPE string.
ENDCLASS. ENDCLASS.
@ -15,52 +23,30 @@ CLASS lcl_gui IMPLEMENTATION.
METHOD f4_folder. METHOD f4_folder.
DATA: lv_title TYPE string. 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'. lv_title = 'Choose the destination folder for the ZIP files'.
cl_gui_frontend_services=>directory_browse( lo_fe_serv->directory_browse(
EXPORTING EXPORTING
window_title = lv_title iv_window_title = lv_title
initial_folder = gv_last_folder iv_initial_folder = gv_last_folder
CHANGING CHANGING
selected_folder = rv_folder cv_selected_folder = rv_folder ).
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4 ).
IF sy-subrc = 0. "Store the last directory for user friendly UI
gv_last_folder = rv_folder. "Store the last directory for user friendly UI gv_last_folder = rv_folder.
ELSE.
zcx_abapgit_exception=>raise( 'Folder matchcode exception' ).
ENDIF.
ENDMETHOD. ENDMETHOD.
METHOD open_folder_frontend. METHOD open_folder_frontend.
IF iv_folder IS INITIAL.
IF NOT iv_folder IS INITIAL. RETURN.
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. ENDIF.
zcl_abapgit_ui_factory=>get_frontend_services( )->execute( iv_document = iv_folder ).
ENDMETHOD. ENDMETHOD.
METHOD select_tr_requests. METHOD select_tr_requests.
@ -71,14 +57,14 @@ CLASS lcl_gui IMPLEMENTATION.
ls_popup-start_column = 5. ls_popup-start_column = 5.
ls_popup-start_row = 5. ls_popup-start_row = 5.
*- Prepare the selection ----------------------------------------------* " Prepare the selection
ls_selection-trkorrpattern = space. ls_selection-trkorrpattern = space.
ls_selection-client = space. ls_selection-client = space.
ls_selection-stdrequest = space. ls_selection-stdrequest = space.
ls_selection-reqfunctions = 'K'. ls_selection-reqfunctions = 'K'.
ls_selection-reqstatus = 'RNODL'. ls_selection-reqstatus = 'RNODL'.
*- Call transport selection popup -------------------------------------* " Call transport selection popup
CALL FUNCTION 'TRINT_SELECT_REQUESTS' CALL FUNCTION 'TRINT_SELECT_REQUESTS'
EXPORTING EXPORTING
iv_username_pattern = '*' iv_username_pattern = '*'
@ -104,61 +90,74 @@ CLASS lcl_gui IMPLEMENTATION.
ENDCLASS. ENDCLASS.
CLASS lcl_transport_zipper DEFINITION FINAL. CLASS lcl_transport_zipper DEFINITION FINAL.
PUBLIC SECTION. PUBLIC SECTION.
TYPES ty_folder TYPE string. TYPES ty_folder TYPE string.
TYPES ty_filename TYPE string. TYPES ty_filename TYPE string.
* File extension
CONSTANTS c_zip_ext TYPE string VALUE '.zip'. CONSTANTS c_zip_ext TYPE string VALUE '.zip'.
METHODS constructor IMPORTING iv_folder TYPE ty_folder METHODS constructor
RAISING zcx_abapgit_exception. IMPORTING
iv_folder TYPE ty_folder
RAISING
zcx_abapgit_exception.
METHODS generate_files IMPORTING it_trkorr TYPE trwbo_request_headers METHODS generate_files
ig_logic TYPE any IMPORTING
RAISING zcx_abapgit_exception. 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. METHODS get_folder
RETURNING
VALUE(rv_full_folder) TYPE ty_folder.
CLASS-METHODS does_folder_exist IMPORTING iv_folder TYPE string CLASS-METHODS does_folder_exist
RETURNING VALUE(rv_folder_exist) TYPE abap_bool IMPORTING
RAISING zcx_abapgit_exception. iv_folder TYPE string
RETURNING
VALUE(rv_folder_exist) TYPE abap_bool
RAISING
zcx_abapgit_exception.
PRIVATE SECTION. PRIVATE SECTION.
DATA: mv_timestamp TYPE string, DATA: mv_timestamp TYPE string,
mv_separator TYPE c, mv_separator TYPE c,
mv_full_folder TYPE ty_folder. mv_full_folder TYPE ty_folder.
METHODS get_full_folder IMPORTING iv_folder TYPE ty_folder METHODS get_full_folder
RETURNING VALUE(rv_full_folder) TYPE ty_folder IMPORTING
RAISING zcx_abapgit_exception. 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 METHODS get_filename
RETURNING VALUE(rv_filename) TYPE ty_filename. IMPORTING
is_trkorr TYPE trwbo_request_header
RETURNING
VALUE(rv_filename) TYPE ty_filename.
ENDCLASS. ENDCLASS.
CLASS lcl_transport_zipper IMPLEMENTATION. CLASS lcl_transport_zipper IMPLEMENTATION.
METHOD constructor. METHOD constructor.
DATA lo_fe_serv TYPE REF TO zif_abapgit_frontend_services.
CONCATENATE sy-datlo sy-timlo INTO mv_timestamp SEPARATED BY '_'. lo_fe_serv = zcl_abapgit_ui_factory=>get_frontend_services( ).
mv_timestamp = |{ sy-datlo }_{ sy-timlo }|.
mv_full_folder = get_full_folder( iv_folder ). mv_full_folder = get_full_folder( iv_folder ).
cl_gui_frontend_services=>get_file_separator( TRY.
CHANGING lo_fe_serv->get_file_separator( CHANGING cv_file_separator = mv_separator ).
file_separator = mv_separator CATCH zcx_abapgit_exception.
EXCEPTIONS "Default MS Windows separator
cntl_error = 1 mv_separator = '\'.
error_no_gui = 2 ENDTRY.
not_supported_by_gui = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
mv_separator = '\'. "Default MS Windows separator
ENDIF.
ENDMETHOD. ENDMETHOD.
METHOD get_folder. METHOD get_folder.
@ -166,82 +165,38 @@ CLASS lcl_transport_zipper IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD does_folder_exist. METHOD does_folder_exist.
rv_folder_exist = zcl_abapgit_ui_factory=>get_frontend_services( )->directory_exist( iv_directory = iv_folder ).
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. ENDMETHOD.
METHOD get_full_folder. METHOD get_full_folder.
DATA: lv_sep TYPE c, DATA: lv_sep TYPE c,
lv_rc TYPE i. lv_rc TYPE i,
lo_fe_serv TYPE REF TO zif_abapgit_frontend_services.
*-obtain file separator character--------------------------------------- lo_fe_serv = zcl_abapgit_ui_factory=>get_frontend_services( ).
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 lo_fe_serv->get_file_separator( CHANGING cv_file_separator = lv_sep ).
mv_timestamp rv_full_folder = |{ iv_folder }{ lv_sep }{ mv_timestamp }|.
INTO rv_full_folder SEPARATED BY lv_sep.
IF does_folder_exist( rv_full_folder ) = abap_false. IF does_folder_exist( rv_full_folder ) = abap_false.
lo_fe_serv->directory_create(
cl_gui_frontend_services=>directory_create(
EXPORTING EXPORTING
directory = rv_full_folder iv_directory = rv_full_folder
CHANGING CHANGING
rc = lv_rc " Return Code cv_rc = lv_rc ).
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. ENDIF.
ENDMETHOD. ENDMETHOD.
METHOD get_filename. METHOD get_filename.
* Generate filename " Generate filename
CONCATENATE is_trkorr-trkorr '_' is_trkorr-as4text '_' mv_timestamp c_zip_ext rv_filename = |{ is_trkorr-trkorr }_{ is_trkorr-as4text }_{ mv_timestamp }{ c_zip_ext }|.
INTO rv_filename.
* Remove reserved characters (for Windows based systems) " Remove reserved characters (for Windows based systems)
TRANSLATE rv_filename USING '/ \ : " * > < ? | '. TRANSLATE rv_filename USING '/ \ : " * > < ? | '.
CONCATENATE mv_full_folder rv_filename INTO rv_filename SEPARATED BY mv_separator. rv_filename = |{ mv_full_folder }{ mv_separator }{ rv_filename }|.
ENDMETHOD. ENDMETHOD.

View File

@ -299,4 +299,43 @@ CLASS ZCL_ABAPGIT_FRONTEND_SERVICES IMPLEMENTATION.
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_frontend_services~directory_exist.
cl_gui_frontend_services=>directory_exist(
EXPORTING
directory = iv_directory
RECEIVING
result = rv_exists
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_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_frontend_services~directory_create.
cl_gui_frontend_services=>directory_create(
EXPORTING
directory = iv_directory
CHANGING
rc = cv_rc
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.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -8,7 +8,7 @@ INTERFACE zif_abapgit_frontend_services PUBLIC.
RETURNING RETURNING
VALUE(rv_xstr) TYPE xstring VALUE(rv_xstr) TYPE xstring
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception.
METHODS file_download METHODS file_download
IMPORTING IMPORTING
!iv_path TYPE string !iv_path TYPE string
@ -23,7 +23,7 @@ INTERFACE zif_abapgit_frontend_services PUBLIC.
RETURNING RETURNING
VALUE(rv_path) TYPE string VALUE(rv_path) TYPE string
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception.
METHODS show_file_open_dialog METHODS show_file_open_dialog
IMPORTING IMPORTING
!iv_title TYPE string !iv_title TYPE string
@ -32,7 +32,7 @@ INTERFACE zif_abapgit_frontend_services PUBLIC.
RETURNING RETURNING
VALUE(rv_path) TYPE string VALUE(rv_path) TYPE string
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception.
METHODS clipboard_export METHODS clipboard_export
IMPORTING IMPORTING
@ -82,4 +82,20 @@ INTERFACE zif_abapgit_frontend_services PUBLIC.
RAISING RAISING
zcx_abapgit_exception. zcx_abapgit_exception.
METHODS directory_exist
IMPORTING
iv_directory TYPE string
RETURNING
VALUE(rv_exists) TYPE abap_bool
RAISING
zcx_abapgit_exception.
METHODS directory_create
IMPORTING
iv_directory TYPE string
CHANGING
cv_rc TYPE i
RAISING
zcx_abapgit_exception.
ENDINTERFACE. ENDINTERFACE.