mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
move contents of ZCL_ABAPGIT_OBJECT_TABL_VALID to
move contents of ZCL_ABAPGIT_OBJECT_TABL_VALID to ZCL_ABAPGIT_OBJECT_TABL_COMPAR #2436
This commit is contained in:
parent
7ff994dd03
commit
452c72d6ce
|
@ -10,9 +10,43 @@ CLASS zcl_abapgit_object_tabl_compar DEFINITION
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!io_local TYPE REF TO zcl_abapgit_xml_input .
|
!io_local TYPE REF TO zcl_abapgit_xml_input .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
|
||||||
|
TYPES:
|
||||||
|
tty_founds TYPE STANDARD TABLE OF rsfindlst
|
||||||
|
WITH NON-UNIQUE DEFAULT KEY .
|
||||||
|
TYPES:
|
||||||
|
tty_seu_obj TYPE STANDARD TABLE OF seu_obj
|
||||||
|
WITH NON-UNIQUE DEFAULT KEY .
|
||||||
|
|
||||||
DATA mo_local TYPE REF TO zcl_abapgit_xml_input .
|
DATA mo_local TYPE REF TO zcl_abapgit_xml_input .
|
||||||
|
|
||||||
|
METHODS get_where_used_recursive
|
||||||
|
IMPORTING
|
||||||
|
!iv_object_name TYPE csequence
|
||||||
|
!iv_depth TYPE i
|
||||||
|
!iv_object_type TYPE euobj-id
|
||||||
|
!it_scope TYPE tty_seu_obj
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_founds_all) TYPE tty_founds
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
METHODS is_structure_used_in_db_table
|
||||||
|
IMPORTING
|
||||||
|
!iv_object_name TYPE dd02v-tabname
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_is_structure_used_in_db_tab) TYPE abap_bool
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
METHODS validate
|
||||||
|
IMPORTING
|
||||||
|
!io_remote_version TYPE REF TO zcl_abapgit_xml_input
|
||||||
|
!io_local_version TYPE REF TO zcl_abapgit_xml_input
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_message) TYPE string
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
PRIVATE SECTION.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,14 +61,140 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL_COMPAR IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD get_where_used_recursive.
|
||||||
|
|
||||||
|
DATA: lt_findstrings TYPE stringtab,
|
||||||
|
lt_founds TYPE STANDARD TABLE OF rsfindlst,
|
||||||
|
lt_scope TYPE tty_seu_obj,
|
||||||
|
lv_findstring LIKE LINE OF lt_findstrings.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_found> TYPE rsfindlst.
|
||||||
|
|
||||||
|
lt_scope = it_scope.
|
||||||
|
|
||||||
|
lv_findstring = iv_object_name.
|
||||||
|
INSERT lv_findstring INTO TABLE lt_findstrings.
|
||||||
|
|
||||||
|
DO iv_depth TIMES.
|
||||||
|
|
||||||
|
CLEAR: lt_founds.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_EU_CROSSREF'
|
||||||
|
EXPORTING
|
||||||
|
i_find_obj_cls = iv_object_type
|
||||||
|
no_dialog = 'X'
|
||||||
|
TABLES
|
||||||
|
i_findstrings = lt_findstrings
|
||||||
|
o_founds = lt_founds
|
||||||
|
i_scope_object_cls = lt_scope
|
||||||
|
EXCEPTIONS
|
||||||
|
not_executed = 1
|
||||||
|
not_found = 2
|
||||||
|
illegal_object = 3
|
||||||
|
no_cross_for_this_object = 4
|
||||||
|
batch = 5
|
||||||
|
batchjob_error = 6
|
||||||
|
wrong_type = 7
|
||||||
|
object_not_exist = 8
|
||||||
|
OTHERS = 9.
|
||||||
|
|
||||||
|
IF sy-subrc = 1
|
||||||
|
OR sy-subrc = 2
|
||||||
|
OR lines( lt_founds ) = 0.
|
||||||
|
EXIT.
|
||||||
|
ELSEIF sy-subrc > 2.
|
||||||
|
zcx_abapgit_exception=>raise_t100( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
INSERT LINES OF lt_founds INTO TABLE rt_founds_all.
|
||||||
|
|
||||||
|
CLEAR: lt_findstrings.
|
||||||
|
|
||||||
|
LOOP AT lt_founds ASSIGNING <ls_found>.
|
||||||
|
|
||||||
|
lv_findstring = <ls_found>-object.
|
||||||
|
INSERT lv_findstring INTO TABLE lt_findstrings.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDDO.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD is_structure_used_in_db_table.
|
||||||
|
|
||||||
|
DATA: lt_scope TYPE tty_seu_obj,
|
||||||
|
lt_founds TYPE tty_founds.
|
||||||
|
|
||||||
|
APPEND 'TABL' TO lt_scope.
|
||||||
|
APPEND 'STRU' TO lt_scope.
|
||||||
|
|
||||||
|
lt_founds = get_where_used_recursive( iv_object_name = iv_object_name
|
||||||
|
iv_object_type = 'STRU'
|
||||||
|
it_scope = lt_scope
|
||||||
|
iv_depth = 5 ).
|
||||||
|
|
||||||
|
DELETE lt_founds WHERE object_cls <> 'DT'.
|
||||||
|
|
||||||
|
rv_is_structure_used_in_db_tab = boolc( lines( lt_founds ) > 0 ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD validate.
|
||||||
|
|
||||||
|
DATA: lt_previous_table_fields TYPE TABLE OF dd03p,
|
||||||
|
ls_previous_table_field LIKE LINE OF lt_previous_table_fields,
|
||||||
|
lt_current_table_fields TYPE TABLE OF dd03p,
|
||||||
|
ls_current_table_field LIKE LINE OF lt_current_table_fields,
|
||||||
|
ls_dd02v TYPE dd02v.
|
||||||
|
|
||||||
|
io_remote_version->read(
|
||||||
|
EXPORTING
|
||||||
|
iv_name = 'DD02V'
|
||||||
|
CHANGING
|
||||||
|
cg_data = ls_dd02v ).
|
||||||
|
|
||||||
|
" We only want to compare transparent tables, or structures used in transparent tables
|
||||||
|
IF ls_dd02v-tabclass <> 'TRANSP' AND is_structure_used_in_db_table( ls_dd02v-tabname ) = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
io_remote_version->read(
|
||||||
|
EXPORTING
|
||||||
|
iv_name = 'DD03P_TABLE'
|
||||||
|
CHANGING
|
||||||
|
cg_data = lt_previous_table_fields ).
|
||||||
|
|
||||||
|
io_local_version->read(
|
||||||
|
EXPORTING
|
||||||
|
iv_name = 'DD03P_TABLE'
|
||||||
|
CHANGING
|
||||||
|
cg_data = lt_current_table_fields ).
|
||||||
|
|
||||||
|
LOOP AT lt_previous_table_fields INTO ls_previous_table_field.
|
||||||
|
READ TABLE lt_current_table_fields WITH KEY fieldname = ls_previous_table_field-fieldname
|
||||||
|
INTO ls_current_table_field.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
IF ls_current_table_field-rollname <> ls_previous_table_field-rollname.
|
||||||
|
rv_message = 'Fields were changed. This may lead to inconsistencies.'.
|
||||||
|
ENDIF.
|
||||||
|
ELSE.
|
||||||
|
rv_message = 'Fields were changed. This may lead to inconsistencies.'.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
IF NOT rv_message IS INITIAL.
|
||||||
|
rv_message = |Database Table { ls_dd02v-tabname }: { rv_message }|.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD zif_abapgit_comparator~compare.
|
METHOD zif_abapgit_comparator~compare.
|
||||||
|
|
||||||
DATA: lo_table_validation TYPE REF TO zcl_abapgit_object_tabl_valid.
|
rs_result-text = validate(
|
||||||
|
|
||||||
|
|
||||||
CREATE OBJECT lo_table_validation.
|
|
||||||
|
|
||||||
rs_result-text = lo_table_validation->validate(
|
|
||||||
io_remote_version = io_remote
|
io_remote_version = io_remote
|
||||||
io_local_version = mo_local ).
|
io_local_version = mo_local ).
|
||||||
|
|
||||||
|
|
|
@ -1,176 +0,0 @@
|
||||||
CLASS zcl_abapgit_object_tabl_valid DEFINITION PUBLIC FINAL.
|
|
||||||
PUBLIC SECTION.
|
|
||||||
METHODS validate
|
|
||||||
IMPORTING
|
|
||||||
io_remote_version TYPE REF TO zcl_abapgit_xml_input
|
|
||||||
io_local_version TYPE REF TO zcl_abapgit_xml_input
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_message) TYPE string
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
PROTECTED SECTION.
|
|
||||||
PRIVATE SECTION.
|
|
||||||
TYPES:
|
|
||||||
tty_founds TYPE STANDARD TABLE OF rsfindlst
|
|
||||||
WITH NON-UNIQUE DEFAULT KEY,
|
|
||||||
tty_seu_obj TYPE STANDARD TABLE OF seu_obj
|
|
||||||
WITH NON-UNIQUE DEFAULT KEY.
|
|
||||||
|
|
||||||
METHODS:
|
|
||||||
get_where_used_recursive
|
|
||||||
IMPORTING
|
|
||||||
iv_object_name TYPE csequence
|
|
||||||
iv_depth TYPE i
|
|
||||||
iv_object_type TYPE euobj-id
|
|
||||||
it_scope TYPE tty_seu_obj
|
|
||||||
RETURNING
|
|
||||||
VALUE(rt_founds_all) TYPE tty_founds
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception,
|
|
||||||
|
|
||||||
is_structure_used_in_db_table
|
|
||||||
IMPORTING
|
|
||||||
iv_object_name TYPE dd02v-tabname
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_is_structure_used_in_db_tab) TYPE abap_bool
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_OBJECT_TABL_VALID IMPLEMENTATION.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD get_where_used_recursive.
|
|
||||||
|
|
||||||
DATA: lt_findstrings TYPE stringtab,
|
|
||||||
lt_founds TYPE STANDARD TABLE OF rsfindlst,
|
|
||||||
lt_scope TYPE tty_seu_obj,
|
|
||||||
lv_findstring LIKE LINE OF lt_findstrings.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_found> TYPE rsfindlst.
|
|
||||||
|
|
||||||
lt_scope = it_scope.
|
|
||||||
|
|
||||||
lv_findstring = iv_object_name.
|
|
||||||
INSERT lv_findstring INTO TABLE lt_findstrings.
|
|
||||||
|
|
||||||
DO iv_depth TIMES.
|
|
||||||
|
|
||||||
CLEAR: lt_founds.
|
|
||||||
|
|
||||||
CALL FUNCTION 'RS_EU_CROSSREF'
|
|
||||||
EXPORTING
|
|
||||||
i_find_obj_cls = iv_object_type
|
|
||||||
no_dialog = 'X'
|
|
||||||
TABLES
|
|
||||||
i_findstrings = lt_findstrings
|
|
||||||
o_founds = lt_founds
|
|
||||||
i_scope_object_cls = lt_scope
|
|
||||||
EXCEPTIONS
|
|
||||||
not_executed = 1
|
|
||||||
not_found = 2
|
|
||||||
illegal_object = 3
|
|
||||||
no_cross_for_this_object = 4
|
|
||||||
batch = 5
|
|
||||||
batchjob_error = 6
|
|
||||||
wrong_type = 7
|
|
||||||
object_not_exist = 8
|
|
||||||
OTHERS = 9.
|
|
||||||
|
|
||||||
IF sy-subrc = 1
|
|
||||||
OR sy-subrc = 2
|
|
||||||
OR lines( lt_founds ) = 0.
|
|
||||||
EXIT.
|
|
||||||
ELSEIF sy-subrc > 2.
|
|
||||||
zcx_abapgit_exception=>raise_t100( ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
INSERT LINES OF lt_founds INTO TABLE rt_founds_all.
|
|
||||||
|
|
||||||
CLEAR: lt_findstrings.
|
|
||||||
|
|
||||||
LOOP AT lt_founds ASSIGNING <ls_found>.
|
|
||||||
|
|
||||||
lv_findstring = <ls_found>-object.
|
|
||||||
INSERT lv_findstring INTO TABLE lt_findstrings.
|
|
||||||
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDDO.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD is_structure_used_in_db_table.
|
|
||||||
|
|
||||||
DATA: lt_scope TYPE tty_seu_obj,
|
|
||||||
lt_founds TYPE tty_founds.
|
|
||||||
|
|
||||||
APPEND 'TABL' TO lt_scope.
|
|
||||||
APPEND 'STRU' TO lt_scope.
|
|
||||||
|
|
||||||
lt_founds = get_where_used_recursive( iv_object_name = iv_object_name
|
|
||||||
iv_object_type = 'STRU'
|
|
||||||
it_scope = lt_scope
|
|
||||||
iv_depth = 5 ).
|
|
||||||
|
|
||||||
DELETE lt_founds WHERE object_cls <> 'DT'.
|
|
||||||
|
|
||||||
rv_is_structure_used_in_db_tab = boolc( lines( lt_founds ) > 0 ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD validate.
|
|
||||||
|
|
||||||
DATA: lt_previous_table_fields TYPE TABLE OF dd03p,
|
|
||||||
ls_previous_table_field LIKE LINE OF lt_previous_table_fields,
|
|
||||||
lt_current_table_fields TYPE TABLE OF dd03p,
|
|
||||||
ls_current_table_field LIKE LINE OF lt_current_table_fields,
|
|
||||||
ls_dd02v TYPE dd02v.
|
|
||||||
|
|
||||||
io_remote_version->read(
|
|
||||||
EXPORTING
|
|
||||||
iv_name = 'DD02V'
|
|
||||||
CHANGING
|
|
||||||
cg_data = ls_dd02v ).
|
|
||||||
|
|
||||||
" We only want to compare transparent tables, or structures used in transparent tables
|
|
||||||
IF ls_dd02v-tabclass <> 'TRANSP' AND is_structure_used_in_db_table( ls_dd02v-tabname ) = abap_false.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
io_remote_version->read(
|
|
||||||
EXPORTING
|
|
||||||
iv_name = 'DD03P_TABLE'
|
|
||||||
CHANGING
|
|
||||||
cg_data = lt_previous_table_fields ).
|
|
||||||
|
|
||||||
io_local_version->read(
|
|
||||||
EXPORTING
|
|
||||||
iv_name = 'DD03P_TABLE'
|
|
||||||
CHANGING
|
|
||||||
cg_data = lt_current_table_fields ).
|
|
||||||
|
|
||||||
LOOP AT lt_previous_table_fields INTO ls_previous_table_field.
|
|
||||||
READ TABLE lt_current_table_fields WITH KEY fieldname = ls_previous_table_field-fieldname
|
|
||||||
INTO ls_current_table_field.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
IF ls_current_table_field-rollname <> ls_previous_table_field-rollname.
|
|
||||||
rv_message = 'Fields were changed. This may lead to inconsistencies.'.
|
|
||||||
ENDIF.
|
|
||||||
ELSE.
|
|
||||||
rv_message = 'Fields were changed. This may lead to inconsistencies.'.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
IF NOT rv_message IS INITIAL.
|
|
||||||
rv_message = |Database Table { ls_dd02v-tabname }: { rv_message }|.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
ENDCLASS.
|
|
|
@ -1,17 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
|
||||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
|
||||||
<asx:values>
|
|
||||||
<VSEOCLASS>
|
|
||||||
<CLSNAME>ZCL_ABAPGIT_OBJECT_TABL_VALID</CLSNAME>
|
|
||||||
<VERSION>1</VERSION>
|
|
||||||
<LANGU>E</LANGU>
|
|
||||||
<DESCRIPT>TABL valid</DESCRIPT>
|
|
||||||
<STATE>1</STATE>
|
|
||||||
<CLSCCINCL>X</CLSCCINCL>
|
|
||||||
<FIXPT>X</FIXPT>
|
|
||||||
<UNICODE>X</UNICODE>
|
|
||||||
</VSEOCLASS>
|
|
||||||
</asx:values>
|
|
||||||
</asx:abap>
|
|
||||||
</abapGit>
|
|
Loading…
Reference in New Issue
Block a user