diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 81ba94a69..893a7e585 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -200,21 +200,24 @@ CLASS lcl_object_clas IMPLEMENTATION. lt_descriptions TYPE lif_defs=>ty_seocompotx_tt, ls_clskey TYPE seoclskey, lt_sotr TYPE lif_defs=>ty_sotr_tt, - lt_lines TYPE tlinetab, - lv_curr_lang TYPE langu, - lv_dummy TYPE string ##needed. + lt_lines TYPE tlinetab. ls_clskey-clsname = ms_item-obj_name. "If class was deserialized with a previous versions of abapGit and current language was different "from master language at this time, this call would return SY-LANGU as master language. To fix "these objects, set SY-LANGU to master language temporarily. - GET LOCALE LANGUAGE lv_curr_lang COUNTRY lv_dummy MODIFIER lv_dummy. - SET LOCALE LANGUAGE mv_language. + lcl_language=>set_current_language( mv_language ). - ls_vseoclass = mo_object_oriented_object_fct->get_class_properties( is_class_key = ls_clskey ). + TRY. + ls_vseoclass = mo_object_oriented_object_fct->get_class_properties( is_class_key = ls_clskey ). - SET LOCALE LANGUAGE lv_curr_lang. + CLEANUP. + lcl_language=>restore_login_language( ). + + ENDTRY. + + lcl_language=>restore_login_language( ). CLEAR: ls_vseoclass-uuid, ls_vseoclass-author, diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 71435fc20..56585a97c 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -987,10 +987,7 @@ CLASS lcl_objects_program IMPLEMENTATION. lt_source TYPE TABLE OF abaptxt255, lt_tpool TYPE textpool_table, ls_tpool LIKE LINE OF lt_tpool, - lo_xml TYPE REF TO lcl_xml_output, - lv_subrc LIKE sy-subrc, - lv_curr_lang TYPE langu, - lv_dummy TYPE string ##needed. + lo_xml TYPE REF TO lcl_xml_output. IF iv_program IS INITIAL. lv_program_name = is_item-obj_name. @@ -998,8 +995,7 @@ CLASS lcl_objects_program IMPLEMENTATION. lv_program_name = iv_program. ENDIF. - GET LOCALE LANGUAGE lv_curr_lang COUNTRY lv_dummy MODIFIER lv_dummy. - SET LOCALE LANGUAGE mv_language. + lcl_language=>set_current_language( mv_language ). CALL FUNCTION 'RPY_PROGRAM_READ' EXPORTING @@ -1014,16 +1010,16 @@ CLASS lcl_objects_program IMPLEMENTATION. permission_error = 3 OTHERS = 4. - lv_subrc = sy-subrc. - - SET LOCALE LANGUAGE lv_curr_lang. - - IF lv_subrc = 2. + IF sy-subrc = 2. + lcl_language=>restore_login_language( ). RETURN. - ELSEIF lv_subrc <> 0. + ELSEIF sy-subrc <> 0. + lcl_language=>restore_login_language( ). lcx_exception=>raise( 'Error reading program' ). ENDIF. + lcl_language=>restore_login_language( ). + ls_progdir = read_progdir( lv_program_name ). IF io_xml IS BOUND. @@ -1070,10 +1066,7 @@ CLASS lcl_objects_program IMPLEMENTATION. lv_progname TYPE reposrc-progname, ls_tpool LIKE LINE OF it_tpool, lv_title TYPE rglif-title, - ls_progdir_new TYPE progdir, - lv_subrc LIKE sy-subrc, - lv_curr_lang TYPE langu, - lv_dummy TYPE string ##needed. + ls_progdir_new TYPE progdir. FIELD-SYMBOLS: TYPE any. @@ -1118,8 +1111,7 @@ CLASS lcl_objects_program IMPLEMENTATION. ENDIF. IF lv_exists = abap_true. - GET LOCALE LANGUAGE lv_curr_lang COUNTRY lv_dummy MODIFIER lv_dummy. - SET LOCALE LANGUAGE mv_language. + lcl_language=>set_current_language( mv_language ). CALL FUNCTION 'RPY_PROGRAM_UPDATE' EXPORTING @@ -1134,17 +1126,17 @@ CLASS lcl_objects_program IMPLEMENTATION. not_found = 3 OTHERS = 4. - lv_subrc = sy-subrc. + IF sy-subrc <> 0. + lcl_language=>restore_login_language( ). - SET LOCALE LANGUAGE lv_curr_lang. - - IF lv_subrc <> 0. IF sy-msgid = 'EU' AND sy-msgno = '510'. lcx_exception=>raise( 'User is currently editing program' ). ELSE. lcx_exception=>raise( 'PROG, error updating' ). ENDIF. ENDIF. + + lcl_language=>restore_login_language( ). ELSE. * function module RPY_PROGRAM_INSERT cannot handle function group includes diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index cdd0ec32e..3324500d9 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -2,6 +2,54 @@ *& Include ZABAPGIT_UTIL *&---------------------------------------------------------------------* +*----------------------------------------------------------------------* +* CLASS lcl_language DEFINITION +*----------------------------------------------------------------------* +* This helper class is used to set and restore the current language. +* As some of the SAP functions used rely on SY-LANGU containing the +* master language, this class is used to temporarily change and then +* restore the value of SY-LANGU. +*----------------------------------------------------------------------* +CLASS lcl_language DEFINITION. + + PUBLIC SECTION. + + CLASS-DATA: + current_language TYPE langu READ-ONLY, + login_language TYPE langu READ-ONLY. + + CLASS-METHODS: + class_constructor, + restore_login_language, + set_current_language + IMPORTING + iv_language TYPE langu. + +ENDCLASS. + +*----------------------------------------------------------------------* +* CLASS lcl_language IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_language IMPLEMENTATION. + + METHOD class_constructor. + DATA lv_dummy TYPE string. + + GET LOCALE LANGUAGE login_language COUNTRY lv_dummy MODIFIER lv_dummy. + ENDMETHOD. + + METHOD restore_login_language. + SET LOCALE LANGUAGE login_language. + ENDMETHOD. + + METHOD set_current_language. + SET LOCALE LANGUAGE iv_language. + ENDMETHOD. + +ENDCLASS. + CLASS lcl_state DEFINITION. PUBLIC SECTION.