Added class lcl_language

Changes of SY-LANGU are now handled by local class lcl_language.
This commit is contained in:
Thomas Erdösi 2017-10-02 11:10:15 +02:00
parent 67956ee771
commit 17cc1536ed
3 changed files with 72 additions and 29 deletions

View File

@ -200,21 +200,24 @@ CLASS lcl_object_clas IMPLEMENTATION.
lt_descriptions TYPE lif_defs=>ty_seocompotx_tt, lt_descriptions TYPE lif_defs=>ty_seocompotx_tt,
ls_clskey TYPE seoclskey, ls_clskey TYPE seoclskey,
lt_sotr TYPE lif_defs=>ty_sotr_tt, lt_sotr TYPE lif_defs=>ty_sotr_tt,
lt_lines TYPE tlinetab, lt_lines TYPE tlinetab.
lv_curr_lang TYPE langu,
lv_dummy TYPE string ##needed.
ls_clskey-clsname = ms_item-obj_name. ls_clskey-clsname = ms_item-obj_name.
"If class was deserialized with a previous versions of abapGit and current language was different "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 "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. "these objects, set SY-LANGU to master language temporarily.
GET LOCALE LANGUAGE lv_curr_lang COUNTRY lv_dummy MODIFIER lv_dummy. lcl_language=>set_current_language( mv_language ).
SET LOCALE 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, CLEAR: ls_vseoclass-uuid,
ls_vseoclass-author, ls_vseoclass-author,

View File

@ -987,10 +987,7 @@ CLASS lcl_objects_program IMPLEMENTATION.
lt_source TYPE TABLE OF abaptxt255, lt_source TYPE TABLE OF abaptxt255,
lt_tpool TYPE textpool_table, lt_tpool TYPE textpool_table,
ls_tpool LIKE LINE OF lt_tpool, ls_tpool LIKE LINE OF lt_tpool,
lo_xml TYPE REF TO lcl_xml_output, lo_xml TYPE REF TO lcl_xml_output.
lv_subrc LIKE sy-subrc,
lv_curr_lang TYPE langu,
lv_dummy TYPE string ##needed.
IF iv_program IS INITIAL. IF iv_program IS INITIAL.
lv_program_name = is_item-obj_name. lv_program_name = is_item-obj_name.
@ -998,8 +995,7 @@ CLASS lcl_objects_program IMPLEMENTATION.
lv_program_name = iv_program. lv_program_name = iv_program.
ENDIF. ENDIF.
GET LOCALE LANGUAGE lv_curr_lang COUNTRY lv_dummy MODIFIER lv_dummy. lcl_language=>set_current_language( mv_language ).
SET LOCALE LANGUAGE mv_language.
CALL FUNCTION 'RPY_PROGRAM_READ' CALL FUNCTION 'RPY_PROGRAM_READ'
EXPORTING EXPORTING
@ -1014,16 +1010,16 @@ CLASS lcl_objects_program IMPLEMENTATION.
permission_error = 3 permission_error = 3
OTHERS = 4. OTHERS = 4.
lv_subrc = sy-subrc. IF sy-subrc = 2.
lcl_language=>restore_login_language( ).
SET LOCALE LANGUAGE lv_curr_lang.
IF lv_subrc = 2.
RETURN. RETURN.
ELSEIF lv_subrc <> 0. ELSEIF sy-subrc <> 0.
lcl_language=>restore_login_language( ).
lcx_exception=>raise( 'Error reading program' ). lcx_exception=>raise( 'Error reading program' ).
ENDIF. ENDIF.
lcl_language=>restore_login_language( ).
ls_progdir = read_progdir( lv_program_name ). ls_progdir = read_progdir( lv_program_name ).
IF io_xml IS BOUND. IF io_xml IS BOUND.
@ -1070,10 +1066,7 @@ CLASS lcl_objects_program IMPLEMENTATION.
lv_progname TYPE reposrc-progname, lv_progname TYPE reposrc-progname,
ls_tpool LIKE LINE OF it_tpool, ls_tpool LIKE LINE OF it_tpool,
lv_title TYPE rglif-title, lv_title TYPE rglif-title,
ls_progdir_new TYPE progdir, ls_progdir_new TYPE progdir.
lv_subrc LIKE sy-subrc,
lv_curr_lang TYPE langu,
lv_dummy TYPE string ##needed.
FIELD-SYMBOLS: <lg_any> TYPE any. FIELD-SYMBOLS: <lg_any> TYPE any.
@ -1118,8 +1111,7 @@ CLASS lcl_objects_program IMPLEMENTATION.
ENDIF. ENDIF.
IF lv_exists = abap_true. IF lv_exists = abap_true.
GET LOCALE LANGUAGE lv_curr_lang COUNTRY lv_dummy MODIFIER lv_dummy. lcl_language=>set_current_language( mv_language ).
SET LOCALE LANGUAGE mv_language.
CALL FUNCTION 'RPY_PROGRAM_UPDATE' CALL FUNCTION 'RPY_PROGRAM_UPDATE'
EXPORTING EXPORTING
@ -1134,17 +1126,17 @@ CLASS lcl_objects_program IMPLEMENTATION.
not_found = 3 not_found = 3
OTHERS = 4. 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'. IF sy-msgid = 'EU' AND sy-msgno = '510'.
lcx_exception=>raise( 'User is currently editing program' ). lcx_exception=>raise( 'User is currently editing program' ).
ELSE. ELSE.
lcx_exception=>raise( 'PROG, error updating' ). lcx_exception=>raise( 'PROG, error updating' ).
ENDIF. ENDIF.
ENDIF. ENDIF.
lcl_language=>restore_login_language( ).
ELSE. ELSE.
* function module RPY_PROGRAM_INSERT cannot handle function group includes * function module RPY_PROGRAM_INSERT cannot handle function group includes

View File

@ -2,6 +2,54 @@
*& Include ZABAPGIT_UTIL *& 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. CLASS lcl_state DEFINITION.
PUBLIC SECTION. PUBLIC SECTION.