diff --git a/src/ui/zcl_abapgit_gui_view_repo.clas.abap b/src/ui/zcl_abapgit_gui_view_repo.clas.abap index 46697a918..da73a3b4e 100644 --- a/src/ui/zcl_abapgit_gui_view_repo.clas.abap +++ b/src/ui/zcl_abapgit_gui_view_repo.clas.abap @@ -84,7 +84,10 @@ CLASS zcl_abapgit_gui_view_repo DEFINITION RETURNING VALUE(rv_html) TYPE string, build_inactive_object_code IMPORTING is_item TYPE zif_abapgit_definitions=>ty_repo_item - RETURNING VALUE(rv_inactive_html_code) TYPE string. + RETURNING VALUE(rv_inactive_html_code) TYPE string, + open_in_master_language + RAISING zcx_abapgit_exception. + ENDCLASS. @@ -220,6 +223,11 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION. iv_act = |{ zif_abapgit_definitions=>c_action-repo_refresh_checksums }?{ lv_key }| iv_opt = lv_crossout ). + IF mo_repo->get_dot_abapgit( )->get_master_language( ) <> cl_abap_syst=>get_logon_language( ). + lo_tb_advanced->add( iv_txt = 'Open in master language' + iv_act = |{ zif_abapgit_definitions=>c_action-repo_open_in_master_lang }?{ lv_key }| ). + ENDIF. + lo_tb_advanced->add( iv_txt = 'Remove' iv_act = |{ zif_abapgit_definitions=>c_action-repo_remove }?{ lv_key }| ). @@ -360,6 +368,61 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION. ENDMETHOD. + METHOD open_in_master_language. + + CONSTANTS: + lc_abapgit_tcode TYPE tcode VALUE `ZABAPGIT` ##NO_TEXT. + + DATA: + lv_master_language TYPE spras, + lt_spagpa TYPE STANDARD TABLE OF rfc_spagpa, + ls_spagpa LIKE LINE OF lt_spagpa, + ls_item TYPE zif_abapgit_definitions=>ty_item. + + " https://blogs.sap.com/2017/01/13/logon-language-sy-langu-and-rfc/ + + lv_master_language = mo_repo->get_dot_abapgit( )->get_master_language( ). + + IF lv_master_language = cl_abap_syst=>get_logon_language( ). + zcx_abapgit_exception=>raise( |Repo already opened in master language| ). + ENDIF. + + ls_item-obj_name = lc_abapgit_tcode. + ls_item-obj_type = |TRAN|. + + IF zcl_abapgit_objects=>exists( ls_item ) = abap_false. + zcx_abapgit_exception=>raise( |Please install the abapGit repository| ). + ENDIF. + + SET LOCALE LANGUAGE lv_master_language. + + ls_spagpa-parid = zif_abapgit_definitions=>c_spagpa_param_repo_key. + ls_spagpa-parval = mo_repo->get_key( ). + INSERT ls_spagpa INTO TABLE lt_spagpa. + + CALL FUNCTION 'ABAP4_CALL_TRANSACTION' + DESTINATION 'NONE' + STARTING NEW TASK 'ABAPGIT' + EXPORTING + tcode = lc_abapgit_tcode + TABLES + spagpa_tab = lt_spagpa + EXCEPTIONS + call_transaction_denied = 1 + tcode_invalid = 2 + communication_failure = 3 + system_failure = 4 + OTHERS = 5. + + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( |Error from ABAP4_CALL_TRANSACTION. Subrc = { sy-subrc }| ). + ENDIF. + + MESSAGE |Repository opened in a new window| TYPE 'S'. + + ENDMETHOD. + + METHOD render_empty_package. DATA: lv_text TYPE string. @@ -527,20 +590,6 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION. ENDMETHOD. - METHOD render_parent_dir. - - CREATE OBJECT ro_html. - - ro_html->add( '' ). - ro_html->add( |{ zcl_abapgit_html=>icon( 'dir' ) }| ). - ro_html->add( |{ build_dir_jump_link( '..' ) }| ). - IF mo_repo->is_offline( ) = abap_false. - ro_html->add( || ). " Dummy for online - ENDIF. - ro_html->add( '' ). - - ENDMETHOD. - METHOD render_item_lock_column. DATA: li_cts_api TYPE REF TO zif_abapgit_cts_api, lv_transport TYPE trkorr, @@ -574,6 +623,21 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION. ENDMETHOD. + METHOD render_parent_dir. + + CREATE OBJECT ro_html. + + ro_html->add( '' ). + ro_html->add( |{ zcl_abapgit_html=>icon( 'dir' ) }| ). + ro_html->add( |{ build_dir_jump_link( '..' ) }| ). + IF mo_repo->is_offline( ) = abap_false. + ro_html->add( || ). " Dummy for online + ENDIF. + ro_html->add( '' ). + + ENDMETHOD. + + METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions. ENDMETHOD. @@ -601,6 +665,9 @@ CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION. WHEN c_actions-display_more. " Increase MAX lines limit mv_max_lines = mv_max_lines + mv_max_setting. ev_state = zif_abapgit_definitions=>c_event_state-re_render. + WHEN zif_abapgit_definitions=>c_action-repo_open_in_master_lang. + open_in_master_language( ). + ev_state = zif_abapgit_definitions=>c_event_state-re_render. ENDCASE. ENDMETHOD. diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index 012670cee..3b503fb03 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -31,11 +31,18 @@ ENDFORM. "run FORM open_gui RAISING zcx_abapgit_exception. + DATA: lv_repo_key TYPE zif_abapgit_persistence=>ty_value. + IF sy-batch = abap_true. zcl_abapgit_background=>run( ). ELSE. - IF zcl_abapgit_persist_settings=>get_instance( )->read( )->get_show_default_repo( ) = abap_false. + GET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_repo_key FIELD lv_repo_key. + + IF lv_repo_key IS NOT INITIAL. + SET PARAMETER ID zif_abapgit_definitions=>c_spagpa_param_repo_key FIELD ''. + zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( lv_repo_key ). + ELSEIF zcl_abapgit_persist_settings=>get_instance( )->read( )->get_show_default_repo( ) = abap_false. " Don't show the last seen repo at startup zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( || ). ENDIF. diff --git a/src/zcl_abapgit_repo.clas.abap b/src/zcl_abapgit_repo.clas.abap index 89e5470be..2b6726ca5 100644 --- a/src/zcl_abapgit_repo.clas.abap +++ b/src/zcl_abapgit_repo.clas.abap @@ -169,11 +169,16 @@ CLASS zcl_abapgit_repo DEFINITION METHODS update_last_deserialize RAISING zcx_abapgit_exception . + METHODS conversion_exit_isola_output + IMPORTING + iv_spras TYPE spras + RETURNING + VALUE(rv_spras) TYPE laiso. ENDCLASS. -CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. +CLASS zcl_abapgit_repo IMPLEMENTATION. METHOD apply_filter. @@ -284,15 +289,23 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. METHOD deserialize_checks. - DATA: lt_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt. + DATA: lt_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt, + lv_master_language TYPE spras, + lv_logon_language TYPE spras. find_remote_dot_abapgit( ). + lv_master_language = get_dot_abapgit( )->get_master_language( ). + lv_logon_language = cl_abap_syst=>get_logon_language( ). + IF get_local_settings( )-write_protected = abap_true. zcx_abapgit_exception=>raise( 'Cannot deserialize. Local code is write-protected by repo config' ). - ELSEIF get_dot_abapgit( )->get_master_language( ) <> sy-langu. - zcx_abapgit_exception=>raise( 'Current login language does not match master language' ). + ELSEIF lv_master_language <> lv_logon_language. + zcx_abapgit_exception=>raise( |Current login language | + && |'{ conversion_exit_isola_output( lv_logon_language ) }'| + && | does not match master language | + && |'{ conversion_exit_isola_output( lv_master_language ) }'| ). ENDIF. rs_checks = zcl_abapgit_objects=>deserialize_checks( me ). @@ -760,4 +773,15 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION. set( it_checksums = lt_checksums ). ENDMETHOD. + + METHOD conversion_exit_isola_output. + + CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT' + EXPORTING + input = iv_spras + IMPORTING + output = rv_spras. + + ENDMETHOD. + ENDCLASS. diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap index 1d12acc64..254f82f64 100644 --- a/src/zif_abapgit_definitions.intf.abap +++ b/src/zif_abapgit_definitions.intf.abap @@ -438,6 +438,7 @@ INTERFACE zif_abapgit_definitions PUBLIC. repo_transport_to_branch TYPE string VALUE 'repo_transport_to_branch', repo_syntax_check TYPE string VALUE 'repo_syntax_check', repo_code_inspector TYPE string VALUE 'repo_code_inspector', + repo_open_in_master_lang TYPE string VALUE 'repo_open_in_master_lang', abapgit_home TYPE string VALUE 'abapgit_home', abapgit_install TYPE string VALUE 'abapgit_install', @@ -491,5 +492,6 @@ INTERFACE zif_abapgit_definitions PUBLIC. inactive TYPE r3state VALUE 'I', END OF c_version . CONSTANTS c_tag_prefix TYPE string VALUE 'refs/tags/' ##NO_TEXT. + CONSTANTS c_spagpa_param_repo_key TYPE char20 VALUE 'REPO_KEY'. ENDINTERFACE.