CLAS/INTF: Fix serialize/deserialize of documentation (#5374)

* INTF: Fix serialize/deserialize of documentation

Documentation of interfaces (document class IF) was missing and has been added.

* Fix translations
This commit is contained in:
Marc Bernard 2022-02-28 14:25:52 +01:00 committed by GitHub
parent 0f6267688e
commit 524f6eebc5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 167 additions and 57 deletions

View File

@ -21,7 +21,7 @@ ENDCLASS.
CLASS zcl_abapgit_oo_base IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OO_BASE IMPLEMENTATION.
METHOD convert_attrib_to_vseoattrib.
@ -51,7 +51,7 @@ CLASS zcl_abapgit_oo_base IMPLEMENTATION.
METHOD zif_abapgit_oo_object_fnc~create_documentation.
CALL FUNCTION 'DOCU_UPD'
EXPORTING
id = 'CL'
id = iv_id
langu = iv_language
object = iv_object_name
no_masterlang = iv_no_masterlang
@ -66,10 +66,21 @@ CLASS zcl_abapgit_oo_base IMPLEMENTATION.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~create_sotr.
ASSERT 0 = 1. "Subclass responsibility
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~delete.
ASSERT 0 = 1. "Subclass responsibility
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~delete_documentation.
CALL FUNCTION 'DOCU_DEL'
EXPORTING
id = 'CL'
id = iv_id
langu = iv_language
object = iv_object_name
typ = 'E'
@ -82,16 +93,6 @@ CLASS zcl_abapgit_oo_base IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~create_sotr.
ASSERT 0 = 1. "Subclass responsibility
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~delete.
ASSERT 0 = 1. "Subclass responsibility
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~deserialize_source.
ASSERT 0 = 1. "Subclass responsibility
ENDMETHOD.
@ -147,14 +148,14 @@ CLASS zcl_abapgit_oo_base IMPLEMENTATION.
IF iv_language IS INITIAL.
" load all languages
SELECT * FROM seocompotx INTO TABLE rt_descriptions
WHERE clsname = iv_obejct_name
WHERE clsname = iv_object_name
AND descript <> ''
ORDER BY PRIMARY KEY. "#EC CI_SUBRC
ELSE.
" load main language
SELECT * FROM seocompotx INTO TABLE rt_descriptions
WHERE clsname = iv_obejct_name
AND langu = iv_language
WHERE clsname = iv_object_name
AND langu = iv_language
AND descript <> ''
ORDER BY PRIMARY KEY. "#EC CI_SUBRC
ENDIF.
@ -163,16 +164,13 @@ CLASS zcl_abapgit_oo_base IMPLEMENTATION.
METHOD zif_abapgit_oo_object_fnc~read_documentation.
DATA: lv_state TYPE dokstate,
lv_object TYPE dokhl-object,
lt_lines TYPE tlinetab.
lv_object = iv_class_name.
CALL FUNCTION 'DOCU_GET'
EXPORTING
id = 'CL'
id = iv_id
langu = iv_language
object = lv_object
object = iv_object_name
version_active_or_last = space " retrieve active version
IMPORTING
dokstate = lv_state

View File

@ -69,6 +69,7 @@ INTERFACE zif_abapgit_oo_object_fnc PUBLIC.
create_documentation
IMPORTING
it_lines TYPE tlinetab
iv_id TYPE dokhl-id
iv_object_name TYPE dokhl-object
iv_language TYPE spras
iv_no_masterlang TYPE abap_bool OPTIONAL
@ -76,6 +77,7 @@ INTERFACE zif_abapgit_oo_object_fnc PUBLIC.
zcx_abapgit_exception,
delete_documentation
IMPORTING
iv_id TYPE dokhl-id
iv_object_name TYPE dokhl-object
iv_language TYPE spras
RAISING
@ -126,7 +128,8 @@ INTERFACE zif_abapgit_oo_object_fnc PUBLIC.
VALUE(rt_text_pool) TYPE textpool_table,
read_documentation
IMPORTING
iv_class_name TYPE seoclsname
iv_id TYPE dokhl-id
iv_object_name TYPE dokhl-object
iv_language TYPE spras
RETURNING
VALUE(rt_lines) TYPE tlinetab,
@ -138,7 +141,7 @@ INTERFACE zif_abapgit_oo_object_fnc PUBLIC.
zcx_abapgit_exception,
read_descriptions
IMPORTING
iv_obejct_name TYPE seoclsname
iv_object_name TYPE seoclsname
iv_language TYPE spras OPTIONAL
RETURNING
VALUE(rt_descriptions) TYPE ty_seocompotx_tt,

View File

@ -93,7 +93,7 @@ ENDCLASS.
CLASS zcl_abapgit_object_clas IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OBJECT_CLAS IMPLEMENTATION.
METHOD constructor.
@ -192,6 +192,7 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION.
IF lines( lt_lines ) = 0.
mi_object_oriented_object_fct->delete_documentation(
iv_id = 'CL'
iv_object_name = lv_object
iv_language = mv_language ).
RETURN.
@ -199,6 +200,7 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION.
mi_object_oriented_object_fct->create_documentation(
it_lines = lt_lines
iv_id = 'CL'
iv_object_name = lv_object
iv_language = mv_language ).
@ -208,6 +210,7 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION.
LOOP AT lt_i18n_lines INTO ls_i18n_lines.
mi_object_oriented_object_fct->create_documentation(
it_lines = ls_i18n_lines-lines
iv_id = 'CL'
iv_object_name = lv_object
iv_language = ls_i18n_lines-language
iv_no_masterlang = abap_true ).
@ -351,8 +354,8 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION.
ENDIF.
lt_descriptions = mi_object_oriented_object_fct->read_descriptions(
iv_obejct_name = iv_clsname
iv_language = lv_language ).
iv_object_name = iv_clsname
iv_language = lv_language ).
IF lines( lt_descriptions ) = 0.
RETURN.
@ -367,13 +370,17 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION.
METHOD serialize_docu.
DATA: lt_lines TYPE tlinetab,
lv_object TYPE dokhl-object,
lv_langu TYPE sy-langu,
lt_i18n_lines TYPE zif_abapgit_lang_definitions=>ty_i18n_lines,
ls_i18n_lines TYPE zif_abapgit_lang_definitions=>ty_i18n_line.
lv_object = iv_clsname.
lt_lines = mi_object_oriented_object_fct->read_documentation(
iv_class_name = iv_clsname
iv_language = mv_language ).
iv_id = 'CL'
iv_object_name = lv_object
iv_language = mv_language ).
IF lines( lt_lines ) > 0.
ii_xml->add( iv_name = 'LINES'
ig_data = lt_lines ).
@ -386,8 +393,9 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION.
LOOP AT it_langu_additional INTO lv_langu.
lt_lines = mi_object_oriented_object_fct->read_documentation(
iv_class_name = iv_clsname
iv_language = lv_langu ).
iv_id = 'CL'
iv_object_name = lv_object
iv_language = lv_langu ).
IF lines( lt_lines ) > 0.
CLEAR ls_i18n_lines.
@ -530,6 +538,13 @@ CLASS zcl_abapgit_object_clas IMPLEMENTATION.
serialize_sotr( ii_xml ).
ENDIF.
SELECT DISTINCT langu
INTO TABLE lt_langu_additional
FROM dokhl
WHERE id = 'CL'
AND object = ls_clskey-clsname
AND langu <> mv_language.
serialize_docu( ii_xml = ii_xml
iv_clsname = ls_clskey-clsname
it_langu_additional = lt_langu_additional ).

View File

@ -24,6 +24,19 @@ CLASS zcl_abapgit_object_intf DEFINITION PUBLIC FINAL INHERITING FROM zcl_abapgi
!ii_xml TYPE REF TO zif_abapgit_xml_input
RAISING
zcx_abapgit_exception .
METHODS serialize_docu
IMPORTING
!ii_xml TYPE REF TO zif_abapgit_xml_output
!it_langu_additional TYPE zif_abapgit_lang_definitions=>ty_langus OPTIONAL
!iv_clsname TYPE seoclsname
RAISING
zcx_abapgit_exception.
METHODS serialize_descr
IMPORTING
!ii_xml TYPE REF TO zif_abapgit_xml_output
!iv_clsname TYPE seoclsname
RAISING
zcx_abapgit_exception.
PRIVATE SECTION.
DATA mi_object_oriented_object_fct TYPE REF TO zif_abapgit_oo_object_fnc .
@ -37,7 +50,7 @@ ENDCLASS.
CLASS zcl_abapgit_object_intf IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
METHOD constructor.
@ -83,8 +96,10 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
METHOD deserialize_docu.
DATA: lt_lines TYPE tlinetab,
lv_object TYPE dokhl-object.
DATA: lt_lines TYPE tlinetab,
lv_object TYPE dokhl-object,
lt_i18n_lines TYPE zif_abapgit_lang_definitions=>ty_i18n_lines,
ls_i18n_lines TYPE zif_abapgit_lang_definitions=>ty_i18n_line.
ii_xml->read( EXPORTING iv_name = 'LINES'
CHANGING cg_data = lt_lines ).
@ -93,6 +108,7 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
IF lines( lt_lines ) = 0.
mi_object_oriented_object_fct->delete_documentation(
iv_id = 'IF'
iv_object_name = lv_object
iv_language = mv_language ).
RETURN.
@ -100,8 +116,22 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
mi_object_oriented_object_fct->create_documentation(
it_lines = lt_lines
iv_id = 'IF'
iv_object_name = lv_object
iv_language = mv_language ).
ii_xml->read( EXPORTING iv_name = 'I18N_LINES'
CHANGING cg_data = lt_i18n_lines ).
LOOP AT lt_i18n_lines INTO ls_i18n_lines.
mi_object_oriented_object_fct->create_documentation(
it_lines = ls_i18n_lines-lines
iv_id = 'IF'
iv_object_name = lv_object
iv_language = ls_i18n_lines-language
iv_no_masterlang = abap_true ).
ENDLOOP.
ENDMETHOD.
@ -140,14 +170,82 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
ENDMETHOD.
METHOD serialize_xml.
DATA:
lt_descriptions TYPE zif_abapgit_oo_object_fnc=>ty_seocompotx_tt,
ls_vseointerf TYPE vseointerf,
ls_clskey TYPE seoclskey,
lt_lines TYPE tlinetab,
lv_language TYPE spras.
METHOD serialize_descr.
DATA: lt_descriptions TYPE zif_abapgit_oo_object_fnc=>ty_seocompotx_tt,
lv_language TYPE spras.
IF ii_xml->i18n_params( )-main_language_only = abap_true.
lv_language = mv_language.
ENDIF.
lt_descriptions = mi_object_oriented_object_fct->read_descriptions(
iv_object_name = iv_clsname
iv_language = lv_language ).
IF lines( lt_descriptions ) = 0.
RETURN.
ENDIF.
ii_xml->add( iv_name = 'DESCRIPTIONS'
ig_data = lt_descriptions ).
ENDMETHOD.
METHOD serialize_docu.
DATA: lt_lines TYPE tlinetab,
lv_object TYPE dokhl-object,
lv_langu TYPE sy-langu,
lt_i18n_lines TYPE zif_abapgit_lang_definitions=>ty_i18n_lines,
ls_i18n_lines TYPE zif_abapgit_lang_definitions=>ty_i18n_line.
lv_object = iv_clsname.
lt_lines = mi_object_oriented_object_fct->read_documentation(
iv_id = 'IF'
iv_object_name = lv_object
iv_language = mv_language ).
IF lines( lt_lines ) > 0.
ii_xml->add( iv_name = 'LINES'
ig_data = lt_lines ).
ENDIF.
IF ii_xml->i18n_params( )-main_language_only = abap_true.
RETURN.
ENDIF.
LOOP AT it_langu_additional INTO lv_langu.
lt_lines = mi_object_oriented_object_fct->read_documentation(
iv_id = 'IF'
iv_object_name = lv_object
iv_language = lv_langu ).
IF lines( lt_lines ) > 0.
CLEAR ls_i18n_lines.
ls_i18n_lines-language = lv_langu.
ls_i18n_lines-lines = lt_lines.
INSERT ls_i18n_lines INTO TABLE lt_i18n_lines.
ENDIF.
ENDLOOP.
IF lines( lt_i18n_lines ) > 0.
ii_xml->add( iv_name = 'I18N_LINES'
ig_data = lt_i18n_lines ).
ENDIF.
ENDMETHOD.
METHOD serialize_xml.
DATA:
ls_vseointerf TYPE vseointerf,
ls_clskey TYPE seoclskey,
lt_langu_additional TYPE zif_abapgit_lang_definitions=>ty_langus.
ls_clskey-clsname = ms_item-obj_name.
@ -166,26 +264,22 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
io_xml->add( iv_name = 'VSEOINTERF'
ig_data = ls_vseointerf ).
lt_lines = mi_object_oriented_object_fct->read_documentation(
iv_class_name = ls_clskey-clsname
iv_language = mv_language ).
IF lines( lt_lines ) > 0.
io_xml->add( iv_name = 'LINES'
ig_data = lt_lines ).
ENDIF.
" Select all active translations of documentation
" Skip main language - it was already serialized
SELECT DISTINCT langu
INTO TABLE lt_langu_additional
FROM dokhl
WHERE id = 'IF'
AND object = ls_clskey-clsname
AND langu <> mv_language.
IF io_xml->i18n_params( )-main_language_only = abap_true.
lv_language = mv_language.
ENDIF.
serialize_docu( ii_xml = io_xml
iv_clsname = ls_clskey-clsname
it_langu_additional = lt_langu_additional ).
lt_descriptions = mi_object_oriented_object_fct->read_descriptions(
iv_obejct_name = ls_clskey-clsname
iv_language = lv_language ).
serialize_descr( ii_xml = io_xml
iv_clsname = ls_clskey-clsname ).
IF lines( lt_descriptions ) > 0.
io_xml->add( iv_name = 'DESCRIPTIONS'
ig_data = lt_descriptions ).
ENDIF.
ENDMETHOD.