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.
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.
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.
CLASS-DATA gv_last_folder TYPE string.
ENDCLASS.
@ -15,52 +23,30 @@ CLASS lcl_gui IMPLEMENTATION.
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'.
cl_gui_frontend_services=>directory_browse(
lo_fe_serv->directory_browse(
EXPORTING
window_title = lv_title
initial_folder = gv_last_folder
iv_window_title = lv_title
iv_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 ).
cv_selected_folder = rv_folder ).
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.
"Store the last directory for user friendly UI
gv_last_folder = rv_folder.
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.
IF iv_folder IS INITIAL.
RETURN.
ENDIF.
zcl_abapgit_ui_factory=>get_frontend_services( )->execute( iv_document = iv_folder ).
ENDMETHOD.
METHOD select_tr_requests.
@ -71,14 +57,14 @@ CLASS lcl_gui IMPLEMENTATION.
ls_popup-start_column = 5.
ls_popup-start_row = 5.
*- Prepare the selection ----------------------------------------------*
" 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 transport selection popup
CALL FUNCTION 'TRINT_SELECT_REQUESTS'
EXPORTING
iv_username_pattern = '*'
@ -104,61 +90,74 @@ CLASS lcl_gui IMPLEMENTATION.
ENDCLASS.
CLASS lcl_transport_zipper DEFINITION FINAL.
PUBLIC SECTION.
TYPES ty_folder TYPE string.
TYPES ty_filename TYPE string.
* File extension
CONSTANTS c_zip_ext TYPE string VALUE '.zip'.
METHODS constructor IMPORTING iv_folder TYPE ty_folder
RAISING zcx_abapgit_exception.
METHODS constructor
IMPORTING
iv_folder TYPE ty_folder
RAISING
zcx_abapgit_exception.
METHODS generate_files IMPORTING it_trkorr TYPE trwbo_request_headers
METHODS generate_files
IMPORTING
it_trkorr TYPE trwbo_request_headers
ig_logic TYPE any
RAISING zcx_abapgit_exception.
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
RETURNING VALUE(rv_folder_exist) TYPE abap_bool
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.
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_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.
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.
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 ).
cl_gui_frontend_services=>get_file_separator(
CHANGING
file_separator = mv_separator
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
mv_separator = '\'. "Default MS Windows separator
ENDIF.
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.
@ -166,82 +165,38 @@ CLASS lcl_transport_zipper IMPLEMENTATION.
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.
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.
lv_rc TYPE i,
lo_fe_serv TYPE REF TO zif_abapgit_frontend_services.
*-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.
lo_fe_serv = zcl_abapgit_ui_factory=>get_frontend_services( ).
CONCATENATE iv_folder
mv_timestamp
INTO rv_full_folder SEPARATED BY lv_sep.
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.
cl_gui_frontend_services=>directory_create(
lo_fe_serv->directory_create(
EXPORTING
directory = rv_full_folder
iv_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' ).
cv_rc = lv_rc ).
ENDIF.
ENDIF.
ENDMETHOD.
METHOD get_filename.
* Generate filename
CONCATENATE is_trkorr-trkorr '_' is_trkorr-as4text '_' mv_timestamp c_zip_ext
INTO rv_filename.
" Generate filename
rv_filename = |{ is_trkorr-trkorr }_{ is_trkorr-as4text }_{ mv_timestamp }{ c_zip_ext }|.
* Remove reserved characters (for Windows based systems)
" Remove reserved characters (for Windows based systems)
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.

View File

@ -299,4 +299,43 @@ CLASS ZCL_ABAPGIT_FRONTEND_SERVICES IMPLEMENTATION.
ENDIF.
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.

View File

@ -8,7 +8,7 @@ INTERFACE zif_abapgit_frontend_services PUBLIC.
RETURNING
VALUE(rv_xstr) TYPE xstring
RAISING
zcx_abapgit_exception .
zcx_abapgit_exception.
METHODS file_download
IMPORTING
!iv_path TYPE string
@ -23,7 +23,7 @@ INTERFACE zif_abapgit_frontend_services PUBLIC.
RETURNING
VALUE(rv_path) TYPE string
RAISING
zcx_abapgit_exception .
zcx_abapgit_exception.
METHODS show_file_open_dialog
IMPORTING
!iv_title TYPE string
@ -32,7 +32,7 @@ INTERFACE zif_abapgit_frontend_services PUBLIC.
RETURNING
VALUE(rv_path) TYPE string
RAISING
zcx_abapgit_exception .
zcx_abapgit_exception.
METHODS clipboard_export
IMPORTING
@ -82,4 +82,20 @@ INTERFACE zif_abapgit_frontend_services PUBLIC.
RAISING
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.