abapGit/src/objects/zcl_abapgit_object_dsys.clas.abap
Marc Bernard 485bb12cc1
Record objects in transports (#5419)
CI tests have shown that several object types are not properly recorded in transports. For some objects there was no transport entry when creating the objects, for others when deleting it. 

This PR add the necessary calls to `corr_insert()`. 

(some SE80 reorders)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
2022-03-31 15:20:25 +02:00

232 lines
4.8 KiB
ABAP

CLASS zcl_abapgit_object_dsys DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
METHODS constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
iv_language TYPE spras.
PROTECTED SECTION.
PRIVATE SECTION.
CONSTANTS: c_typ TYPE dokhl-typ VALUE 'E',
c_id TYPE dokhl-id VALUE 'HY'.
DATA: mv_doc_object TYPE sobj_name.
TYPES: BEGIN OF ty_data,
doctitle TYPE dsyst-doktitle,
head TYPE thead,
lines TYPE tline_tab,
END OF ty_data.
METHODS deserialize_dsys
IMPORTING
ii_xml TYPE REF TO zif_abapgit_xml_input
RAISING
zcx_abapgit_exception.
METHODS get_main_lang
RETURNING
VALUE(rv_language) TYPE spras.
ENDCLASS.
CLASS zcl_abapgit_object_dsys IMPLEMENTATION.
METHOD constructor.
DATA: lv_prefix TYPE namespace,
lv_bare_name TYPE progname.
super->constructor( is_item = is_item
iv_language = iv_language ).
IF ms_item-obj_name(1) = '/'.
CALL FUNCTION 'RS_NAME_SPLIT_NAMESPACE'
EXPORTING
name_with_namespace = ms_item-obj_name
IMPORTING
namespace = lv_prefix
name_without_namespace = lv_bare_name.
ELSE.
lv_bare_name = ms_item-obj_name.
ENDIF.
mv_doc_object = |{ lv_bare_name+0(4) }{ lv_prefix }{ lv_bare_name+4(*) }|.
ENDMETHOD.
METHOD deserialize_dsys.
DATA: ls_data TYPE ty_data,
ls_docu_info TYPE dokil,
lv_version TYPE dokvers,
lv_doku_obj TYPE doku_obj.
lv_doku_obj = mv_doc_object.
ii_xml->read( EXPORTING iv_name = 'DSYS'
CHANGING cg_data = ls_data ).
CALL FUNCTION 'DOCU_INIT'
EXPORTING
id = c_id
langu = mv_language
object = lv_doku_obj
typ = c_typ
IMPORTING
xdokil = ls_docu_info.
lv_version = ls_docu_info-version.
CALL FUNCTION 'DOCU_UPDATE'
EXPORTING
head = ls_data-head
state = 'A'
typ = c_typ
version = lv_version
TABLES
line = ls_data-lines.
ENDMETHOD.
METHOD get_main_lang.
SELECT SINGLE langu FROM dokil INTO rv_language
WHERE id = c_id
AND object = mv_doc_object
AND masterlang = abap_true.
IF sy-subrc <> 0.
rv_language = mv_language.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
rv_user = zcl_abapgit_factory=>get_longtexts( )->changed_by(
iv_object_name = mv_doc_object
iv_longtext_id = c_id ).
ENDMETHOD.
METHOD zif_abapgit_object~delete.
zcl_abapgit_factory=>get_longtexts( )->delete(
iv_object_name = mv_doc_object
iv_longtext_id = c_id ).
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_metadata TYPE zif_abapgit_definitions=>ty_metadata.
ls_metadata = io_xml->get_metadata( ).
CASE ls_metadata-version.
WHEN 'v1.0.0'.
deserialize_dsys( io_xml ).
WHEN 'v2.0.0'.
zcl_abapgit_factory=>get_longtexts( )->deserialize(
ii_xml = io_xml
iv_main_language = mv_language ).
WHEN OTHERS.
zcx_abapgit_exception=>raise( 'unsupported DSYS version' ).
ENDCASE.
tadir_insert( iv_package ).
corr_insert( iv_package ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: lv_count TYPE i.
SELECT SINGLE COUNT( * ) FROM dokil INTO lv_count
WHERE id = c_id
AND object = mv_doc_object. "#EC CI_GENBUFF
rv_bool = boolc( lv_count > 0 ).
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_steps.
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
rs_metadata-version = 'v2.0.0'.
ENDMETHOD.
METHOD zif_abapgit_object~is_active.
rv_active = is_active( ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
DATA lv_lang TYPE sy-langu.
lv_lang = get_main_lang( ).
CALL FUNCTION 'DSYS_EDIT'
EXPORTING
dokclass = mv_doc_object+0(4)
dokname = mv_doc_object+4(*)
doklangu = lv_lang
EXCEPTIONS
class_unknown = 1
object_not_found = 2
OTHERS = 3.
rv_exit = boolc( sy-subrc = 0 ).
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
zcl_abapgit_factory=>get_longtexts( )->serialize(
iv_object_name = mv_doc_object
iv_longtext_id = c_id
ii_xml = io_xml ).
ENDMETHOD.
ENDCLASS.