mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
TABL: Remove field position from serialization (#4508)
* TABL: Remove field position from serialization It's not necessary to serialize field position (`DD03P-POSTION`). Fields can simply be numberred sequentially during deserialize. This avoid issues with include structures that have different number of fields in original and target systems. Closes #4506 * Clear tabname, ddlanguage * Lint Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> * Clear dd08v-ddlanguage Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
09ce51e646
commit
f8076e9ca2
|
@ -61,22 +61,26 @@ CLASS zcl_abapgit_object_tabl DEFINITION
|
||||||
|
|
||||||
TYPES:
|
TYPES:
|
||||||
ty_dd03p_tt TYPE STANDARD TABLE OF dd03p .
|
ty_dd03p_tt TYPE STANDARD TABLE OF dd03p .
|
||||||
|
|
||||||
TYPES:
|
TYPES:
|
||||||
BEGIN OF ty_dd02_text,
|
BEGIN OF ty_dd02_text,
|
||||||
ddlanguage TYPE dd02t-ddlanguage,
|
ddlanguage TYPE dd02t-ddlanguage,
|
||||||
ddtext TYPE dd02t-ddtext,
|
ddtext TYPE dd02t-ddtext,
|
||||||
END OF ty_dd02_text,
|
END OF ty_dd02_text .
|
||||||
ty_dd02_texts TYPE STANDARD TABLE OF ty_dd02_text.
|
TYPES:
|
||||||
|
ty_dd02_texts TYPE STANDARD TABLE OF ty_dd02_text .
|
||||||
|
|
||||||
CONSTANTS c_longtext_id_tabl TYPE dokil-id VALUE 'TB' ##NO_TEXT.
|
CONSTANTS c_longtext_id_tabl TYPE dokil-id VALUE 'TB' ##NO_TEXT.
|
||||||
CONSTANTS:
|
CONSTANTS:
|
||||||
BEGIN OF c_s_dataname,
|
BEGIN OF c_s_dataname,
|
||||||
segment_definition TYPE string VALUE 'SEGMENT_DEFINITION',
|
segment_definition TYPE string VALUE 'SEGMENT_DEFINITION',
|
||||||
tabl_extras TYPE string VALUE 'TABL_EXTRAS',
|
tabl_extras TYPE string VALUE 'TABL_EXTRAS',
|
||||||
END OF c_s_dataname.
|
END OF c_s_dataname .
|
||||||
|
|
||||||
|
|
||||||
|
METHODS deserialize_indexes
|
||||||
|
IMPORTING
|
||||||
|
!io_xml TYPE REF TO zif_abapgit_xml_input
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
METHODS clear_dd03p_fields
|
METHODS clear_dd03p_fields
|
||||||
CHANGING
|
CHANGING
|
||||||
!ct_dd03p TYPE ty_dd03p_tt .
|
!ct_dd03p TYPE ty_dd03p_tt .
|
||||||
|
@ -84,26 +88,29 @@ CLASS zcl_abapgit_object_tabl DEFINITION
|
||||||
"! @parameter rv_is_idoc_segment | It's an IDoc segment or not
|
"! @parameter rv_is_idoc_segment | It's an IDoc segment or not
|
||||||
METHODS is_idoc_segment
|
METHODS is_idoc_segment
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_is_idoc_segment) TYPE abap_bool.
|
VALUE(rv_is_idoc_segment) TYPE abap_bool .
|
||||||
METHODS clear_dd03p_fields_common
|
METHODS clear_dd03p_fields_common
|
||||||
CHANGING
|
CHANGING
|
||||||
!cs_dd03p TYPE dd03p .
|
!cs_dd03p TYPE dd03p .
|
||||||
METHODS clear_dd03p_fields_dataelement
|
METHODS clear_dd03p_fields_dataelement
|
||||||
CHANGING
|
CHANGING
|
||||||
!cs_dd03p TYPE dd03p .
|
!cs_dd03p TYPE dd03p .
|
||||||
|
METHODS serialize_texts
|
||||||
METHODS:
|
IMPORTING
|
||||||
serialize_texts
|
!io_xml TYPE REF TO zif_abapgit_xml_output
|
||||||
IMPORTING io_xml TYPE REF TO zif_abapgit_xml_output
|
RAISING
|
||||||
RAISING zcx_abapgit_exception,
|
zcx_abapgit_exception .
|
||||||
deserialize_texts
|
METHODS deserialize_texts
|
||||||
IMPORTING io_xml TYPE REF TO zif_abapgit_xml_input
|
IMPORTING
|
||||||
is_dd02v TYPE dd02v
|
!io_xml TYPE REF TO zif_abapgit_xml_input
|
||||||
RAISING zcx_abapgit_exception,
|
!is_dd02v TYPE dd02v
|
||||||
is_db_table_category
|
RAISING
|
||||||
IMPORTING iv_tabclass TYPE dd02l-tabclass
|
zcx_abapgit_exception .
|
||||||
RETURNING VALUE(rv_is_db_table_type) TYPE dd02l-tabclass.
|
METHODS is_db_table_category
|
||||||
|
IMPORTING
|
||||||
|
!iv_tabclass TYPE dd02l-tabclass
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_is_db_table_type) TYPE dd02l-tabclass .
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
@ -151,6 +158,11 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
||||||
|
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
" Clear position to avoid issues with include structures that contain different number of fields
|
||||||
|
LOOP AT ct_dd03p ASSIGNING <ls_dd03p>.
|
||||||
|
CLEAR: <ls_dd03p>-position, <ls_dd03p>-tabname, <ls_dd03p>-ddlanguage.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
@ -324,6 +336,65 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD deserialize_indexes.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
lv_tname TYPE trobj_name,
|
||||||
|
lt_dd12v TYPE dd12vtab,
|
||||||
|
ls_dd12v LIKE LINE OF lt_dd12v,
|
||||||
|
lt_dd17v TYPE dd17vtab,
|
||||||
|
ls_dd17v LIKE LINE OF lt_dd17v,
|
||||||
|
lt_secondary LIKE lt_dd17v.
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'DD12V'
|
||||||
|
CHANGING cg_data = lt_dd12v ).
|
||||||
|
io_xml->read( EXPORTING iv_name = 'DD17V'
|
||||||
|
CHANGING cg_data = lt_dd17v ).
|
||||||
|
|
||||||
|
LOOP AT lt_dd12v INTO ls_dd12v.
|
||||||
|
|
||||||
|
* todo, call corr_insert?
|
||||||
|
|
||||||
|
CLEAR lt_secondary.
|
||||||
|
LOOP AT lt_dd17v INTO ls_dd17v
|
||||||
|
WHERE sqltab = ls_dd12v-sqltab AND indexname = ls_dd12v-indexname.
|
||||||
|
APPEND ls_dd17v TO lt_secondary.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
CALL FUNCTION 'DDIF_INDX_PUT'
|
||||||
|
EXPORTING
|
||||||
|
name = ls_dd12v-sqltab
|
||||||
|
id = ls_dd12v-indexname
|
||||||
|
dd12v_wa = ls_dd12v
|
||||||
|
TABLES
|
||||||
|
dd17v_tab = lt_secondary
|
||||||
|
EXCEPTIONS
|
||||||
|
indx_not_found = 1
|
||||||
|
name_inconsistent = 2
|
||||||
|
indx_inconsistent = 3
|
||||||
|
put_failure = 4
|
||||||
|
put_refused = 5
|
||||||
|
OTHERS = 6.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
zcx_abapgit_exception=>raise_t100( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CALL FUNCTION 'DD_DD_TO_E071'
|
||||||
|
EXPORTING
|
||||||
|
type = 'INDX'
|
||||||
|
name = ls_dd12v-sqltab
|
||||||
|
id = ls_dd12v-indexname
|
||||||
|
IMPORTING
|
||||||
|
obj_name = lv_tname.
|
||||||
|
|
||||||
|
zcl_abapgit_objects_activation=>add( iv_type = 'INDX'
|
||||||
|
iv_name = lv_tname ).
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD deserialize_texts.
|
METHOD deserialize_texts.
|
||||||
|
|
||||||
DATA: lv_name TYPE ddobjname,
|
DATA: lv_name TYPE ddobjname,
|
||||||
|
@ -644,26 +715,26 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD zif_abapgit_object~deserialize.
|
METHOD zif_abapgit_object~deserialize.
|
||||||
|
|
||||||
DATA: lv_name TYPE ddobjname,
|
DATA: lv_name TYPE ddobjname,
|
||||||
lv_tname TYPE trobj_name,
|
ls_dd02v TYPE dd02v,
|
||||||
ls_dd02v TYPE dd02v,
|
ls_dd09l TYPE dd09l,
|
||||||
ls_dd09l TYPE dd09l,
|
lt_dd03p TYPE TABLE OF dd03p,
|
||||||
lt_dd03p TYPE TABLE OF dd03p,
|
lt_dd05m TYPE TABLE OF dd05m,
|
||||||
lt_dd05m TYPE TABLE OF dd05m,
|
lt_dd08v TYPE TABLE OF dd08v,
|
||||||
lt_dd08v TYPE TABLE OF dd08v,
|
lt_dd35v TYPE TABLE OF dd35v,
|
||||||
lt_dd12v TYPE dd12vtab,
|
lt_dd36m TYPE dd36mttyp,
|
||||||
lt_dd17v TYPE dd17vtab,
|
lv_refs TYPE abap_bool,
|
||||||
ls_dd17v LIKE LINE OF lt_dd17v,
|
ls_extras TYPE ty_tabl_extras.
|
||||||
lt_secondary LIKE lt_dd17v,
|
|
||||||
lt_dd35v TYPE TABLE OF dd35v,
|
|
||||||
lt_dd36m TYPE dd36mttyp,
|
|
||||||
ls_dd12v LIKE LINE OF lt_dd12v,
|
|
||||||
lv_refs TYPE abap_bool,
|
|
||||||
ls_extras TYPE ty_tabl_extras.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_dd03p> TYPE dd03p,
|
FIELD-SYMBOLS: <ls_dd03p> TYPE dd03p,
|
||||||
|
<ls_dd05m> TYPE dd05m,
|
||||||
|
<ls_dd08v> TYPE dd08v,
|
||||||
|
<ls_dd35v> TYPE dd35v,
|
||||||
|
<ls_dd36m> TYPE dd36m,
|
||||||
<lg_roworcolst> TYPE any.
|
<lg_roworcolst> TYPE any.
|
||||||
|
|
||||||
|
lv_name = ms_item-obj_name. " type conversion
|
||||||
|
|
||||||
IF deserialize_idoc_segment( io_xml = io_xml
|
IF deserialize_idoc_segment( io_xml = io_xml
|
||||||
iv_package = iv_package ) = abap_false.
|
iv_package = iv_package ) = abap_false.
|
||||||
|
|
||||||
|
@ -687,19 +758,36 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
" Number fields sequentially and fill table name
|
||||||
|
LOOP AT lt_dd03p ASSIGNING <ls_dd03p>.
|
||||||
|
<ls_dd03p>-position = sy-tabix.
|
||||||
|
<ls_dd03p>-tabname = lv_name.
|
||||||
|
<ls_dd03p>-ddlanguage = mv_language.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
io_xml->read( EXPORTING iv_name = 'DD05M_TABLE'
|
io_xml->read( EXPORTING iv_name = 'DD05M_TABLE'
|
||||||
CHANGING cg_data = lt_dd05m ).
|
CHANGING cg_data = lt_dd05m ).
|
||||||
io_xml->read( EXPORTING iv_name = 'DD08V_TABLE'
|
io_xml->read( EXPORTING iv_name = 'DD08V_TABLE'
|
||||||
CHANGING cg_data = lt_dd08v ).
|
CHANGING cg_data = lt_dd08v ).
|
||||||
io_xml->read( EXPORTING iv_name = 'DD12V'
|
|
||||||
CHANGING cg_data = lt_dd12v ).
|
|
||||||
io_xml->read( EXPORTING iv_name = 'DD17V'
|
|
||||||
CHANGING cg_data = lt_dd17v ).
|
|
||||||
io_xml->read( EXPORTING iv_name = 'DD35V_TALE'
|
io_xml->read( EXPORTING iv_name = 'DD35V_TALE'
|
||||||
CHANGING cg_data = lt_dd35v ).
|
CHANGING cg_data = lt_dd35v ).
|
||||||
io_xml->read( EXPORTING iv_name = 'DD36M'
|
io_xml->read( EXPORTING iv_name = 'DD36M'
|
||||||
CHANGING cg_data = lt_dd36m ).
|
CHANGING cg_data = lt_dd36m ).
|
||||||
|
|
||||||
|
LOOP AT lt_dd05m ASSIGNING <ls_dd05m>.
|
||||||
|
<ls_dd05m>-tabname = lv_name.
|
||||||
|
ENDLOOP.
|
||||||
|
LOOP AT lt_dd08v ASSIGNING <ls_dd08v>.
|
||||||
|
<ls_dd08v>-tabname = lv_name.
|
||||||
|
<ls_dd08v>-ddlanguage = mv_language.
|
||||||
|
ENDLOOP.
|
||||||
|
LOOP AT lt_dd35v ASSIGNING <ls_dd35v>.
|
||||||
|
<ls_dd35v>-tabname = lv_name.
|
||||||
|
ENDLOOP.
|
||||||
|
LOOP AT lt_dd36m ASSIGNING <ls_dd36m>.
|
||||||
|
<ls_dd36m>-tabname = lv_name.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
" DDIC Step: Remove references to search helps and foreign keys
|
" DDIC Step: Remove references to search helps and foreign keys
|
||||||
IF iv_step = zif_abapgit_object=>gc_step_id-ddic.
|
IF iv_step = zif_abapgit_object=>gc_step_id-ddic.
|
||||||
CLEAR: lt_dd08v, lt_dd35v, lt_dd36m.
|
CLEAR: lt_dd08v, lt_dd35v, lt_dd36m.
|
||||||
|
@ -713,8 +801,6 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
||||||
corr_insert( iv_package = iv_package
|
corr_insert( iv_package = iv_package
|
||||||
ig_object_class = 'DICT' ).
|
ig_object_class = 'DICT' ).
|
||||||
|
|
||||||
lv_name = ms_item-obj_name. " type conversion
|
|
||||||
|
|
||||||
CALL FUNCTION 'DDIF_TABL_PUT'
|
CALL FUNCTION 'DDIF_TABL_PUT'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
name = lv_name
|
name = lv_name
|
||||||
|
@ -739,47 +825,7 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
||||||
|
|
||||||
zcl_abapgit_objects_activation=>add_item( ms_item ).
|
zcl_abapgit_objects_activation=>add_item( ms_item ).
|
||||||
|
|
||||||
* handle indexes
|
deserialize_indexes( io_xml ).
|
||||||
LOOP AT lt_dd12v INTO ls_dd12v.
|
|
||||||
|
|
||||||
* todo, call corr_insert?
|
|
||||||
|
|
||||||
CLEAR lt_secondary.
|
|
||||||
LOOP AT lt_dd17v INTO ls_dd17v
|
|
||||||
WHERE sqltab = ls_dd12v-sqltab AND indexname = ls_dd12v-indexname.
|
|
||||||
APPEND ls_dd17v TO lt_secondary.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
CALL FUNCTION 'DDIF_INDX_PUT'
|
|
||||||
EXPORTING
|
|
||||||
name = ls_dd12v-sqltab
|
|
||||||
id = ls_dd12v-indexname
|
|
||||||
dd12v_wa = ls_dd12v
|
|
||||||
TABLES
|
|
||||||
dd17v_tab = lt_secondary
|
|
||||||
EXCEPTIONS
|
|
||||||
indx_not_found = 1
|
|
||||||
name_inconsistent = 2
|
|
||||||
indx_inconsistent = 3
|
|
||||||
put_failure = 4
|
|
||||||
put_refused = 5
|
|
||||||
OTHERS = 6.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
zcx_abapgit_exception=>raise_t100( ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CALL FUNCTION 'DD_DD_TO_E071'
|
|
||||||
EXPORTING
|
|
||||||
type = 'INDX'
|
|
||||||
name = ls_dd12v-sqltab
|
|
||||||
id = ls_dd12v-indexname
|
|
||||||
IMPORTING
|
|
||||||
obj_name = lv_tname.
|
|
||||||
|
|
||||||
zcl_abapgit_objects_activation=>add( iv_type = 'INDX'
|
|
||||||
iv_name = lv_tname ).
|
|
||||||
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
deserialize_texts( io_xml = io_xml
|
deserialize_texts( io_xml = io_xml
|
||||||
is_dd02v = ls_dd02v ).
|
is_dd02v = ls_dd02v ).
|
||||||
|
@ -890,10 +936,11 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_dd12v> LIKE LINE OF lt_dd12v,
|
FIELD-SYMBOLS: <ls_dd12v> LIKE LINE OF lt_dd12v,
|
||||||
<ls_dd05m> LIKE LINE OF lt_dd05m,
|
<ls_dd05m> LIKE LINE OF lt_dd05m,
|
||||||
|
<ls_dd08v> LIKE LINE OF lt_dd08v,
|
||||||
|
<ls_dd35v> LIKE LINE OF lt_dd35v,
|
||||||
<ls_dd36m> LIKE LINE OF lt_dd36m,
|
<ls_dd36m> LIKE LINE OF lt_dd36m,
|
||||||
<lg_roworcolst> TYPE any.
|
<lg_roworcolst> TYPE any.
|
||||||
|
|
||||||
|
|
||||||
lv_name = ms_item-obj_name.
|
lv_name = ms_item-obj_name.
|
||||||
|
|
||||||
CALL FUNCTION 'DDIF_TABL_GET'
|
CALL FUNCTION 'DDIF_TABL_GET'
|
||||||
|
@ -960,6 +1007,7 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
||||||
* remove foreign keys inherited from .INCLUDEs
|
* remove foreign keys inherited from .INCLUDEs
|
||||||
DELETE lt_dd08v WHERE noinherit = 'N'.
|
DELETE lt_dd08v WHERE noinherit = 'N'.
|
||||||
LOOP AT lt_dd05m ASSIGNING <ls_dd05m>.
|
LOOP AT lt_dd05m ASSIGNING <ls_dd05m>.
|
||||||
|
CLEAR <ls_dd05m>-tabname.
|
||||||
lv_index = sy-tabix.
|
lv_index = sy-tabix.
|
||||||
READ TABLE lt_dd08v WITH KEY fieldname = <ls_dd05m>-fieldname TRANSPORTING NO FIELDS.
|
READ TABLE lt_dd08v WITH KEY fieldname = <ls_dd05m>-fieldname TRANSPORTING NO FIELDS.
|
||||||
IF sy-subrc <> 0.
|
IF sy-subrc <> 0.
|
||||||
|
@ -967,9 +1015,17 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
LOOP AT lt_dd08v ASSIGNING <ls_dd08v>.
|
||||||
|
CLEAR: <ls_dd08v>-tabname, <ls_dd08v>-ddlanguage.
|
||||||
|
ENDLOOP.
|
||||||
|
LOOP AT lt_dd35v ASSIGNING <ls_dd35v>.
|
||||||
|
CLEAR <ls_dd35v>-tabname.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
* remove inherited search helps
|
* remove inherited search helps
|
||||||
DELETE lt_dd35v WHERE shlpinher = abap_true.
|
DELETE lt_dd35v WHERE shlpinher = abap_true.
|
||||||
LOOP AT lt_dd36m ASSIGNING <ls_dd36m>.
|
LOOP AT lt_dd36m ASSIGNING <ls_dd36m>.
|
||||||
|
CLEAR <ls_dd36m>-tabname.
|
||||||
lv_index = sy-tabix.
|
lv_index = sy-tabix.
|
||||||
READ TABLE lt_dd35v WITH KEY fieldname = <ls_dd36m>-fieldname TRANSPORTING NO FIELDS.
|
READ TABLE lt_dd35v WITH KEY fieldname = <ls_dd36m>-fieldname TRANSPORTING NO FIELDS.
|
||||||
IF sy-subrc <> 0.
|
IF sy-subrc <> 0.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user