DEVC,NSPC: Serialize software component for add-ons (#6891)

This commit is contained in:
Marc Bernard 2024-04-14 09:37:02 +02:00 committed by GitHub
parent f60e92d9b9
commit a648f1ef51
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 152 additions and 2 deletions

View File

@ -64,6 +64,9 @@ CLASS zcl_abapgit_object_devc DEFINITION PUBLIC
METHODS remove_obsolete_tadir METHODS remove_obsolete_tadir
IMPORTING IMPORTING
!iv_package_name TYPE devclass . !iv_package_name TYPE devclass .
METHODS adjust_sw_component
CHANGING
cv_dlvunit TYPE dlvunit.
ENDCLASS. ENDCLASS.
@ -71,6 +74,28 @@ ENDCLASS.
CLASS zcl_abapgit_object_devc IMPLEMENTATION. CLASS zcl_abapgit_object_devc IMPLEMENTATION.
METHOD adjust_sw_component.
DATA:
lv_namespace TYPE namespace,
lv_comp_type TYPE c LENGTH 1.
" Keep software component of a package for ABAP add-ons (customer and partner developments)...
SELECT SINGLE comp_type FROM cvers INTO lv_comp_type WHERE component = cv_dlvunit.
IF sy-subrc = 0 AND lv_comp_type = 'A'.
" ... with a matching namespace (typical Add-on Assembly Kit scenario)
lv_namespace = |/{ cv_dlvunit }/|.
SELECT SINGLE namespace FROM trnspace INTO lv_namespace WHERE namespace = lv_namespace.
IF sy-subrc <> 0.
CLEAR cv_dlvunit.
ENDIF.
ELSE.
CLEAR cv_dlvunit.
ENDIF.
ENDMETHOD.
METHOD constructor. METHOD constructor.
super->constructor( super->constructor(
@ -567,10 +592,10 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
* Fields not set: * Fields not set:
* korrflag * korrflag
* dlvunit
* parentcl * parentcl
* cli_check * cli_check
* intprefx * intprefx
ls_data_sign-dlvunit = abap_true.
ls_data_sign-ctext = abap_true. ls_data_sign-ctext = abap_true.
ls_data_sign-as4user = abap_true. ls_data_sign-as4user = abap_true.
ls_data_sign-pdevclass = abap_true. ls_data_sign-pdevclass = abap_true.
@ -844,6 +869,9 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
CLEAR: ls_package_data-intfprefx, CLEAR: ls_package_data-intfprefx,
ls_package_data-cli_check. ls_package_data-cli_check.
" If software component is related to add-on and a valid namespace, then keep it
adjust_sw_component( CHANGING cv_dlvunit = ls_package_data-dlvunit ).
ASSIGN COMPONENT 'TRANSLATION_DEPTH_TEXT' ASSIGN COMPONENT 'TRANSLATION_DEPTH_TEXT'
OF STRUCTURE ls_package_data OF STRUCTURE ls_package_data
TO <lg_field>. TO <lg_field>.

View File

@ -6,6 +6,14 @@ CLASS zcl_abapgit_object_nspc DEFINITION
PUBLIC SECTION. PUBLIC SECTION.
INTERFACES zif_abapgit_object . INTERFACES zif_abapgit_object .
METHODS constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
iv_language TYPE spras
!io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
!io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL.
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
@ -26,6 +34,8 @@ CLASS zcl_abapgit_object_nspc DEFINITION
TYPES: TYPES:
ty_nspc_texts TYPE STANDARD TABLE OF ty_nspc_text . ty_nspc_texts TYPE STANDARD TABLE OF ty_nspc_text .
DATA mv_component TYPE cvers-component.
METHODS serialize_texts METHODS serialize_texts
IMPORTING IMPORTING
!ii_xml TYPE REF TO zif_abapgit_xml_output !ii_xml TYPE REF TO zif_abapgit_xml_output
@ -42,6 +52,16 @@ CLASS zcl_abapgit_object_nspc DEFINITION
!iv_package TYPE devclass !iv_package TYPE devclass
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS serialize_sw_component
IMPORTING
!ii_xml TYPE REF TO zif_abapgit_xml_output
RAISING
zcx_abapgit_exception .
METHODS deserialize_sw_component
IMPORTING
!ii_xml TYPE REF TO zif_abapgit_xml_input
RAISING
zcx_abapgit_exception .
ENDCLASS. ENDCLASS.
@ -62,11 +82,64 @@ CLASS zcl_abapgit_object_nspc IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD constructor.
super->constructor(
is_item = is_item
iv_language = iv_language
io_files = io_files
io_i18n_params = io_i18n_params ).
mv_component = replace( val = is_item-obj_name
sub = '/'
with = ''
occ = 0 ).
ENDMETHOD.
METHOD deserialize_sw_component.
DATA:
ls_cvers_old TYPE cvers,
ls_cvers_new TYPE cvers,
ls_cvers_ref TYPE cvers_ref.
ii_xml->read( EXPORTING iv_name = 'CVERS'
CHANGING cg_data = ls_cvers_new ).
ii_xml->read( EXPORTING iv_name = 'CVERS_REF'
CHANGING cg_data = ls_cvers_ref ).
IF ls_cvers_new IS NOT INITIAL.
SELECT SINGLE * FROM cvers INTO ls_cvers_old WHERE component = mv_component.
IF sy-subrc = 0.
IF ls_cvers_old <> ls_cvers_new.
zcx_abapgit_exception=>raise( `Update of software component not supported.`
&& ` Use Software Update Manager (SUM)` ).
ENDIF.
ELSE.
INSERT cvers FROM ls_cvers_new.
ENDIF.
ENDIF.
IF ls_cvers_ref IS NOT INITIAL.
MODIFY cvers_ref FROM ls_cvers_ref.
IF sy-subrc <> 0.
INSERT cvers_ref FROM ls_cvers_ref.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD deserialize_texts. METHOD deserialize_texts.
DATA: DATA:
ls_trnspacett TYPE trnspacett, ls_trnspacett TYPE trnspacett,
lt_i18n_langs TYPE TABLE OF langu, lt_i18n_langs TYPE TABLE OF langu,
lt_cvers_refs TYPE TABLE OF cvers_ref,
ls_cvers_ref TYPE cvers_ref,
lt_nspc_texts TYPE ty_nspc_texts. lt_nspc_texts TYPE ty_nspc_texts.
FIELD-SYMBOLS: FIELD-SYMBOLS:
@ -79,14 +152,18 @@ CLASS zcl_abapgit_object_nspc IMPLEMENTATION.
ii_xml->read( EXPORTING iv_name = 'NSPC_TEXTS' ii_xml->read( EXPORTING iv_name = 'NSPC_TEXTS'
CHANGING cg_data = lt_nspc_texts ). CHANGING cg_data = lt_nspc_texts ).
ii_xml->read( EXPORTING iv_name = 'CVERS_REFS'
CHANGING cg_data = lt_cvers_refs ).
SORT lt_i18n_langs. SORT lt_i18n_langs.
SORT lt_nspc_texts BY spras. " Optimization SORT lt_nspc_texts BY spras. " Optimization
SORT lt_cvers_refs BY langu. " Optimization
LOOP AT lt_i18n_langs ASSIGNING <lv_lang>. LOOP AT lt_i18n_langs ASSIGNING <lv_lang>.
ls_trnspacett-namespace = iv_namespace. ls_trnspacett-namespace = iv_namespace.
READ TABLE lt_nspc_texts ASSIGNING <ls_nspc_text> WITH KEY spras = <lv_lang>. READ TABLE lt_nspc_texts ASSIGNING <ls_nspc_text> WITH KEY spras = <lv_lang>.
IF sy-subrc <> 0. IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |NSPC_TEXTS cannot find lang { <lv_lang> } in XML| ). zcx_abapgit_exception=>raise( |Cannot find language { <lv_lang> } in XML| ).
ENDIF. ENDIF.
MOVE-CORRESPONDING <ls_nspc_text> TO ls_trnspacett. MOVE-CORRESPONDING <ls_nspc_text> TO ls_trnspacett.
@ -97,16 +174,49 @@ CLASS zcl_abapgit_object_nspc IMPLEMENTATION.
IF sy-subrc <> 0. IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error upserting text for namespace| ). zcx_abapgit_exception=>raise( |Error upserting text for namespace| ).
ENDIF. ENDIF.
READ TABLE lt_cvers_refs INTO ls_cvers_ref WITH KEY langu = <lv_lang>.
IF sy-subrc = 0.
MODIFY cvers_ref FROM ls_cvers_ref.
IF sy-subrc <> 0.
INSERT cvers_ref FROM ls_cvers_ref.
ENDIF.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error upserting text for software component| ).
ENDIF.
ENDIF.
ENDLOOP. ENDLOOP.
ENDMETHOD. ENDMETHOD.
METHOD serialize_sw_component.
DATA:
ls_cvers TYPE cvers,
ls_cvers_ref TYPE cvers_ref.
SELECT SINGLE * FROM cvers INTO ls_cvers WHERE component = mv_component.
IF sy-subrc = 0.
ii_xml->add( iv_name = 'CVERS'
ig_data = ls_cvers ).
ENDIF.
SELECT SINGLE * FROM cvers_ref INTO ls_cvers_ref WHERE component = mv_component AND langu = mv_language.
IF sy-subrc = 0.
ii_xml->add( iv_name = 'CVERS_REF'
ig_data = ls_cvers_ref ).
ENDIF.
ENDMETHOD.
METHOD serialize_texts. METHOD serialize_texts.
DATA: DATA:
ls_trnspacett TYPE trnspacett, ls_trnspacett TYPE trnspacett,
lt_nspc_texts TYPE ty_nspc_texts, lt_nspc_texts TYPE ty_nspc_texts,
lt_cvers_refs TYPE TABLE OF cvers_ref,
lt_i18n_langs TYPE TABLE OF langu. lt_i18n_langs TYPE TABLE OF langu.
FIELD-SYMBOLS: FIELD-SYMBOLS:
@ -129,10 +239,15 @@ CLASS zcl_abapgit_object_nspc IMPLEMENTATION.
APPEND INITIAL LINE TO lt_nspc_texts ASSIGNING <ls_nspc_text>. APPEND INITIAL LINE TO lt_nspc_texts ASSIGNING <ls_nspc_text>.
MOVE-CORRESPONDING ls_trnspacett TO <ls_nspc_text>. MOVE-CORRESPONDING ls_trnspacett TO <ls_nspc_text>.
ENDIF. ENDIF.
SELECT * FROM cvers_ref APPENDING TABLE lt_cvers_refs
WHERE component = mv_component AND langu = <lv_lang>
ORDER BY PRIMARY KEY.
ENDLOOP. ENDLOOP.
SORT lt_i18n_langs ASCENDING. SORT lt_i18n_langs ASCENDING.
SORT lt_nspc_texts BY spras ASCENDING. SORT lt_nspc_texts BY spras ASCENDING.
SORT lt_cvers_refs.
IF lines( lt_i18n_langs ) > 0. IF lines( lt_i18n_langs ) > 0.
ii_xml->add( iv_name = 'I18N_LANGS' ii_xml->add( iv_name = 'I18N_LANGS'
@ -140,6 +255,9 @@ CLASS zcl_abapgit_object_nspc IMPLEMENTATION.
ii_xml->add( iv_name = 'NSPC_TEXTS' ii_xml->add( iv_name = 'NSPC_TEXTS'
ig_data = lt_nspc_texts ). ig_data = lt_nspc_texts ).
ii_xml->add( iv_name = 'CVERS_REFS'
ig_data = lt_cvers_refs ).
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
@ -221,6 +339,8 @@ CLASS zcl_abapgit_object_nspc IMPLEMENTATION.
deserialize_texts( ii_xml = io_xml deserialize_texts( ii_xml = io_xml
iv_namespace = ls_nspc-namespace ). iv_namespace = ls_nspc-namespace ).
deserialize_sw_component( io_xml ).
" Fill trnspace and trnspacel tables " Fill trnspace and trnspacel tables
CALL FUNCTION 'TR_ACTIVATE_NAMESPACE' CALL FUNCTION 'TR_ACTIVATE_NAMESPACE'
EXPORTING EXPORTING
@ -345,5 +465,7 @@ CLASS zcl_abapgit_object_nspc IMPLEMENTATION.
serialize_texts( io_xml ). serialize_texts( io_xml ).
serialize_sw_component( io_xml ).
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.