From 1e8257420cb53ffeee675d6d26529dee97ebe2be Mon Sep 17 00:00:00 2001 From: TheWirtschaftsmann Date: Wed, 8 Feb 2017 12:21:27 +0200 Subject: [PATCH 1/3] Serializing of texts translactions --- src/zabapgit_object_prog.prog.abap | 98 +++++++++++++++++++++++++++--- src/zabapgit_objects.prog.abap | 21 +++++-- 2 files changed, 107 insertions(+), 12 deletions(-) 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 From b4f2912a04c57345174f3e90d15884fc97537b53 Mon Sep 17 00:00:00 2001 From: TheWirtschaftsmann Date: Thu, 9 Feb 2017 19:05:31 +0200 Subject: [PATCH 2/3] Deserializing of textpool This commit delivers the fixes and fine-tuning to the deserializing of textpools for a program. --- src/zabapgit_object_prog.prog.abap | 18 ++++++------------ src/zabapgit_objects.prog.abap | 3 +-- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/zabapgit_object_prog.prog.abap b/src/zabapgit_object_prog.prog.abap index ea8ac200b..dc85ede9b 100644 --- a/src/zabapgit_object_prog.prog.abap +++ b/src/zabapgit_object_prog.prog.abap @@ -203,25 +203,19 @@ CLASS lcl_object_prog IMPLEMENTATION. 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 ). + 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_langs_i18n ASSIGNING . - READ TABLE lt_tpool_i18n INTO ls_tpool_i18n WITH KEY langu = . + LOOP AT lt_tpool_i18n ASSIGNING . deserialize_textpool( iv_program = ms_item-obj_name - iv_language = - it_tpool = ls_tpool_i18n-textpool ). + iv_language = -langu + 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 1adbad923..9235cf313 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -1426,8 +1426,7 @@ CLASS lcl_objects_program IMPLEMENTATION. INSERT TEXTPOOL iv_program FROM it_tpool - LANGUAGE lv_language - STATE 'I'. + LANGUAGE lv_language. IF sy-subrc <> 0. lcx_exception=>raise( 'error from INSERT TEXTPOOL' ). ENDIF. From 8c0678843ca45a871e0fb3afeb4f6ab4d13405c6 Mon Sep 17 00:00:00 2001 From: TheWirtschaftsmann Date: Thu, 9 Feb 2017 19:56:52 +0200 Subject: [PATCH 3/3] Finu-tuning of serializing Optimized serializing of program texts by removing unnecessary structure lt_langs_i18n. --- src/zabapgit_object_prog.prog.abap | 33 ++++++++++-------------------- src/zabapgit_objects.prog.abap | 2 +- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/src/zabapgit_object_prog.prog.abap b/src/zabapgit_object_prog.prog.abap index dc85ede9b..8c0d9dab7 100644 --- a/src/zabapgit_object_prog.prog.abap +++ b/src/zabapgit_object_prog.prog.abap @@ -15,7 +15,7 @@ CLASS lcl_object_prog DEFINITION INHERITING FROM lcl_objects_program FINAL. PRIVATE SECTION. TYPES: BEGIN OF ty_tpool_i18n, - langu TYPE langu, + language TYPE langu, textpool TYPE textpool_table, END OF ty_tpool_i18n, tt_tpool_i18n TYPE STANDARD TABLE OF ty_tpool_i18n. @@ -163,39 +163,28 @@ CLASS lcl_object_prog IMPLEMENTATION. 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. + DATA lt_tpool_i18n TYPE tt_tpool_i18n. - FIELD-SYMBOLS: - LIKE LINE OF lt_langs_i18n, - LIKE LINE OF lt_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 TABLE lt_langs_i18n + 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_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. + 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_langs_i18n ) > 0. - io_xml->add( iv_name = 'I18N_LANGS' - ig_data = lt_langs_i18n ). - + IF lines( lt_tpool_i18n ) > 0. io_xml->add( iv_name = 'I18N_TPOOL' ig_data = lt_tpool_i18n ). ENDIF. @@ -212,7 +201,7 @@ CLASS lcl_object_prog IMPLEMENTATION. LOOP AT lt_tpool_i18n ASSIGNING . deserialize_textpool( iv_program = ms_item-obj_name - iv_language = -langu + iv_language = -language it_tpool = -textpool ). ENDLOOP. diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 9235cf313..9dc251848 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -874,8 +874,8 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super. METHODS deserialize_textpool IMPORTING iv_program TYPE programm - iv_language TYPE langu OPTIONAL it_tpool TYPE textpool_table + iv_language TYPE langu OPTIONAL RAISING lcx_exception. METHODS deserialize_cua