diff --git a/src/zabapgit_object_prog.prog.abap b/src/zabapgit_object_prog.prog.abap index 17700fa4a..ea8ac200b 100644 --- a/src/zabapgit_object_prog.prog.abap +++ b/src/zabapgit_object_prog.prog.abap @@ -13,6 +13,21 @@ CLASS lcl_object_prog DEFINITION INHERITING FROM lcl_objects_program FINAL. INTERFACES lif_object. ALIASES mo_files FOR lif_object~mo_files. + PRIVATE SECTION. + TYPES: BEGIN OF ty_tpool_i18n, + langu TYPE langu, + textpool TYPE textpool_table, + END OF ty_tpool_i18n, + tt_tpool_i18n TYPE STANDARD TABLE OF ty_tpool_i18n. + + METHODS: + serialize_texts + IMPORTING io_xml TYPE REF TO lcl_xml_output + RAISING lcx_exception, + deserialize_texts + IMPORTING io_xml TYPE REF TO lcl_xml_input + RAISING lcx_exception. + ENDCLASS. "lcl_object_prog DEFINITION *----------------------------------------------------------------------* @@ -37,7 +52,7 @@ CLASS lcl_object_prog IMPLEMENTATION. IF sy-subrc <> 0. rv_user = c_user_unknown. ENDIF. - ENDMETHOD. + ENDMETHOD. "lif_object~changed_by METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). @@ -47,7 +62,6 @@ CLASS lcl_object_prog IMPLEMENTATION. DATA: lv_progname TYPE reposrc-progname. - SELECT SINGLE progname FROM reposrc INTO lv_progname WHERE progname = ms_item-obj_name AND r3state = 'A'. @@ -95,6 +109,9 @@ CLASS lcl_object_prog IMPLEMENTATION. is_item = ms_item io_files = mo_files ). + " Texts serializing (translations) + serialize_texts( io_xml ). + ENDMETHOD. "lif_serialize~serialize METHOD lif_object~deserialize. @@ -116,28 +133,95 @@ CLASS lcl_object_prog IMPLEMENTATION. lt_tpool = read_tpool( lt_tpool_ext ). io_xml->read( EXPORTING iv_name = 'PROGDIR' - CHANGING cg_data = ls_progdir ). + CHANGING cg_data = ls_progdir ). deserialize_program( is_progdir = ls_progdir it_source = lt_source it_tpool = lt_tpool iv_package = iv_package ). io_xml->read( EXPORTING iv_name = 'DYNPROS' - CHANGING cg_data = lt_dynpros ). + CHANGING cg_data = lt_dynpros ). deserialize_dynpros( it_dynpros = lt_dynpros ). io_xml->read( EXPORTING iv_name = 'CUA' - CHANGING cg_data = ls_cua ). + CHANGING cg_data = ls_cua ). deserialize_cua( iv_program_name = lv_program_name is_cua = ls_cua ). - deserialize_textpool( iv_program = ms_item-obj_name + " Texts deserializing (English) + deserialize_textpool( iv_program = lv_program_name it_tpool = lt_tpool ). + " Texts deserializing (translations) + deserialize_texts( io_xml ). + ENDMETHOD. "lif_serialize~deserialize METHOD lif_object~compare_to_remote_version. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. - ENDMETHOD. + ENDMETHOD. "lif_object~compare_to_remote_version + + METHOD serialize_texts. + + DATA: + lt_tpool_i18n TYPE tt_tpool_i18n, + ls_tpool_i18n LIKE LINE OF lt_tpool_i18n, + lt_langs_i18n TYPE TABLE OF langu. + + FIELD-SYMBOLS: + LIKE LINE OF lt_langs_i18n, + LIKE LINE OF lt_tpool_i18n. + + " Table d010tinf stores info. on languages in which program is maintained + " Select all active translations of program texts + " Skip master language - it was already serialized + SELECT DISTINCT language + INTO TABLE lt_langs_i18n + FROM d010tinf + WHERE r3state = 'A' + AND prog = ms_item-obj_name + AND language <> mv_language. + + SORT lt_langs_i18n ASCENDING. + LOOP AT lt_langs_i18n ASSIGNING . + READ TEXTPOOL ms_item-obj_name LANGUAGE INTO ls_tpool_i18n-textpool. + + IF sy-subrc IS INITIAL. + ls_tpool_i18n-langu = . + APPEND ls_tpool_i18n TO lt_tpool_i18n. + ENDIF. + ENDLOOP. + + IF lines( lt_langs_i18n ) > 0. + io_xml->add( iv_name = 'I18N_LANGS' + ig_data = lt_langs_i18n ). + + io_xml->add( iv_name = 'I18N_TPOOL' + ig_data = lt_tpool_i18n ). + ENDIF. + + ENDMETHOD. "serialize_texts + + METHOD deserialize_texts. + DATA: + lt_tpool_i18n TYPE tt_tpool_i18n, + ls_tpool_i18n LIKE LINE OF lt_tpool_i18n, + lt_langs_i18n TYPE STANDARD TABLE OF langu. + + FIELD-SYMBOLS: LIKE LINE OF lt_langs_i18n. + + io_xml->read( EXPORTING iv_name = 'I18N_LANGS' + CHANGING cg_data = lt_langs_i18n ). + + io_xml->read( EXPORTING iv_name = 'I18N_TPOOL' + CHANGING cg_data = lt_tpool_i18n ). + + LOOP AT lt_langs_i18n ASSIGNING . + READ TABLE lt_tpool_i18n INTO ls_tpool_i18n WITH KEY langu = . + deserialize_textpool( iv_program = ms_item-obj_name + iv_language = + it_tpool = ls_tpool_i18n-textpool ). + ENDLOOP. + ENDMETHOD. "deserialize_texts ENDCLASS. "lcl_object_prog IMPLEMENTATION diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 2bd281a13..1adbad923 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -873,8 +873,9 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super. RAISING lcx_exception. METHODS deserialize_textpool - IMPORTING iv_program TYPE programm - it_tpool TYPE textpool_table + IMPORTING iv_program TYPE programm + iv_language TYPE langu OPTIONAL + it_tpool TYPE textpool_table RAISING lcx_exception. METHODS deserialize_cua @@ -1410,6 +1411,14 @@ CLASS lcl_objects_program IMPLEMENTATION. METHOD deserialize_textpool. + DATA lv_language TYPE langu. + + IF iv_language IS INITIAL. + lv_language = mv_language. + ELSE. + lv_language = iv_language. + ENDIF. + READ TABLE it_tpool WITH KEY id = 'R' TRANSPORTING NO FIELDS. IF ( sy-subrc = 0 AND lines( it_tpool ) = 1 ) OR lines( it_tpool ) = 0. RETURN. " no action for includes @@ -1417,14 +1426,16 @@ CLASS lcl_objects_program IMPLEMENTATION. INSERT TEXTPOOL iv_program FROM it_tpool - LANGUAGE mv_language + LANGUAGE lv_language STATE 'I'. IF sy-subrc <> 0. lcx_exception=>raise( 'error from INSERT TEXTPOOL' ). ENDIF. - lcl_objects_activation=>add( iv_type = 'REPT' - iv_name = iv_program ). + IF lv_language = mv_language. " Add just once + lcl_objects_activation=>add( iv_type = 'REPT' + iv_name = iv_program ). + ENDIF. ENDMETHOD. "deserialize_textpool