diff --git a/src/zabapgit_object_prog.prog.abap b/src/zabapgit_object_prog.prog.abap index 17700fa4a..8c0d9dab7 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, + language 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,78 @@ 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. + + FIELD-SYMBOLS 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 CORRESPONDING FIELDS OF TABLE lt_tpool_i18n + FROM d010tinf + WHERE r3state = 'A' + AND prog = ms_item-obj_name + AND language <> mv_language. + + SORT lt_tpool_i18n BY language ASCENDING. + LOOP AT lt_tpool_i18n ASSIGNING . + READ TEXTPOOL ms_item-obj_name + LANGUAGE -language + INTO -textpool. + ENDLOOP. + + IF lines( lt_tpool_i18n ) > 0. + 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. + FIELD-SYMBOLS LIKE LINE OF lt_tpool_i18n. + + io_xml->read( EXPORTING iv_name = 'I18N_TPOOL' + CHANGING cg_data = lt_tpool_i18n ). + + LOOP AT lt_tpool_i18n ASSIGNING . + deserialize_textpool( iv_program = ms_item-obj_name + iv_language = -language + it_tpool = -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..9dc251848 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 + it_tpool TYPE textpool_table + iv_language TYPE langu OPTIONAL 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,15 @@ CLASS lcl_objects_program IMPLEMENTATION. INSERT TEXTPOOL iv_program FROM it_tpool - LANGUAGE mv_language - STATE 'I'. + LANGUAGE lv_language. 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