Merge pull request #608 from sbcgua/prog_serializing_texts

Prog serializing texts
This commit is contained in:
Lars Hvam 2017-02-11 10:39:08 +01:00 committed by GitHub
commit f909b184e2
2 changed files with 90 additions and 13 deletions

View File

@ -13,6 +13,21 @@ CLASS lcl_object_prog DEFINITION INHERITING FROM lcl_objects_program FINAL.
INTERFACES lif_object. INTERFACES lif_object.
ALIASES mo_files FOR lif_object~mo_files. 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 ENDCLASS. "lcl_object_prog DEFINITION
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
@ -37,7 +52,7 @@ CLASS lcl_object_prog IMPLEMENTATION.
IF sy-subrc <> 0. IF sy-subrc <> 0.
rv_user = c_user_unknown. rv_user = c_user_unknown.
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD. "lif_object~changed_by
METHOD lif_object~get_metadata. METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ). rs_metadata = get_metadata( ).
@ -47,7 +62,6 @@ CLASS lcl_object_prog IMPLEMENTATION.
DATA: lv_progname TYPE reposrc-progname. DATA: lv_progname TYPE reposrc-progname.
SELECT SINGLE progname FROM reposrc INTO lv_progname SELECT SINGLE progname FROM reposrc INTO lv_progname
WHERE progname = ms_item-obj_name WHERE progname = ms_item-obj_name
AND r3state = 'A'. AND r3state = 'A'.
@ -95,6 +109,9 @@ CLASS lcl_object_prog IMPLEMENTATION.
is_item = ms_item is_item = ms_item
io_files = mo_files ). io_files = mo_files ).
" Texts serializing (translations)
serialize_texts( io_xml ).
ENDMETHOD. "lif_serialize~serialize ENDMETHOD. "lif_serialize~serialize
METHOD lif_object~deserialize. METHOD lif_object~deserialize.
@ -116,28 +133,78 @@ CLASS lcl_object_prog IMPLEMENTATION.
lt_tpool = read_tpool( lt_tpool_ext ). lt_tpool = read_tpool( lt_tpool_ext ).
io_xml->read( EXPORTING iv_name = 'PROGDIR' io_xml->read( EXPORTING iv_name = 'PROGDIR'
CHANGING cg_data = ls_progdir ). CHANGING cg_data = ls_progdir ).
deserialize_program( is_progdir = ls_progdir deserialize_program( is_progdir = ls_progdir
it_source = lt_source it_source = lt_source
it_tpool = lt_tpool it_tpool = lt_tpool
iv_package = iv_package ). iv_package = iv_package ).
io_xml->read( EXPORTING iv_name = 'DYNPROS' io_xml->read( EXPORTING iv_name = 'DYNPROS'
CHANGING cg_data = lt_dynpros ). CHANGING cg_data = lt_dynpros ).
deserialize_dynpros( it_dynpros = lt_dynpros ). deserialize_dynpros( it_dynpros = lt_dynpros ).
io_xml->read( EXPORTING iv_name = 'CUA' 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 deserialize_cua( iv_program_name = lv_program_name
is_cua = ls_cua ). 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 ). it_tpool = lt_tpool ).
" Texts deserializing (translations)
deserialize_texts( io_xml ).
ENDMETHOD. "lif_serialize~deserialize ENDMETHOD. "lif_serialize~deserialize
METHOD lif_object~compare_to_remote_version. METHOD lif_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. 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 <tpool> 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 <tpool>.
READ TEXTPOOL ms_item-obj_name
LANGUAGE <tpool>-language
INTO <tpool>-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 <tpool> 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 <tpool>.
deserialize_textpool( iv_program = ms_item-obj_name
iv_language = <tpool>-language
it_tpool = <tpool>-textpool ).
ENDLOOP.
ENDMETHOD. "deserialize_texts
ENDCLASS. "lcl_object_prog IMPLEMENTATION ENDCLASS. "lcl_object_prog IMPLEMENTATION

View File

@ -873,8 +873,9 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super.
RAISING lcx_exception. RAISING lcx_exception.
METHODS deserialize_textpool METHODS deserialize_textpool
IMPORTING iv_program TYPE programm IMPORTING iv_program TYPE programm
it_tpool TYPE textpool_table it_tpool TYPE textpool_table
iv_language TYPE langu OPTIONAL
RAISING lcx_exception. RAISING lcx_exception.
METHODS deserialize_cua METHODS deserialize_cua
@ -1410,6 +1411,14 @@ CLASS lcl_objects_program IMPLEMENTATION.
METHOD deserialize_textpool. 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. 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. IF ( sy-subrc = 0 AND lines( it_tpool ) = 1 ) OR lines( it_tpool ) = 0.
RETURN. " no action for includes RETURN. " no action for includes
@ -1417,14 +1426,15 @@ CLASS lcl_objects_program IMPLEMENTATION.
INSERT TEXTPOOL iv_program INSERT TEXTPOOL iv_program
FROM it_tpool FROM it_tpool
LANGUAGE mv_language LANGUAGE lv_language.
STATE 'I'.
IF sy-subrc <> 0. IF sy-subrc <> 0.
lcx_exception=>raise( 'error from INSERT TEXTPOOL' ). lcx_exception=>raise( 'error from INSERT TEXTPOOL' ).
ENDIF. ENDIF.
lcl_objects_activation=>add( iv_type = 'REPT' IF lv_language = mv_language. " Add just once
iv_name = iv_program ). lcl_objects_activation=>add( iv_type = 'REPT'
iv_name = iv_program ).
ENDIF.
ENDMETHOD. "deserialize_textpool ENDMETHOD. "deserialize_textpool