mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
* First try merge resolve_ddls into resolve_ddic * Refactoring * Move to global class * delete merge artifacts * Fix merge errors * Rename global denpencies class
This commit is contained in:
parent
f31a0cfbbe
commit
0a33be9186
|
@ -2316,10 +2316,6 @@ CLASS lcl_objects DEFINITION FINAL.
|
|||
IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item
|
||||
RETURNING VALUE(rv_class_name) TYPE string.
|
||||
|
||||
CLASS-METHODS resolve_ddic
|
||||
CHANGING ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
|
||||
RAISING zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS warning_overwrite
|
||||
CHANGING ct_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||
RAISING zcx_abapgit_exception.
|
||||
|
@ -2351,8 +2347,5 @@ CLASS lcl_objects DEFINITION FINAL.
|
|||
iv_descr TYPE string
|
||||
CHANGING ct_files TYPE zif_abapgit_definitions=>ty_file_signatures_tt
|
||||
RAISING zcx_abapgit_exception.
|
||||
CLASS-METHODS resolve_ddls
|
||||
CHANGING
|
||||
ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||
|
||||
ENDCLASS. "lcl_object DEFINITION
|
||||
|
|
|
@ -298,58 +298,9 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
|
||||
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF it_tadir.
|
||||
|
||||
|
||||
* misuse field KORRNUM to fix deletion sequence
|
||||
|
||||
lt_tadir[] = it_tadir[].
|
||||
|
||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||
CASE <ls_tadir>-object.
|
||||
WHEN 'IATU'.
|
||||
<ls_tadir>-korrnum = '5500'.
|
||||
WHEN 'IARP'.
|
||||
<ls_tadir>-korrnum = '5510'.
|
||||
WHEN 'IASP'.
|
||||
<ls_tadir>-korrnum = '5520'.
|
||||
WHEN 'SUSC'.
|
||||
<ls_tadir>-korrnum = '5000'.
|
||||
WHEN 'TTYP' OR 'TABL' OR 'VIEW'.
|
||||
SELECT SINGLE tabclass FROM dd02l
|
||||
INTO lv_tabclass
|
||||
WHERE tabname = <ls_tadir>-obj_name
|
||||
AND as4local = 'A'
|
||||
AND as4vers = '0000'.
|
||||
IF sy-subrc = 0 AND lv_tabclass = 'APPEND'.
|
||||
* delete append structures before database tables
|
||||
<ls_tadir>-korrnum = '6500'.
|
||||
ELSE.
|
||||
<ls_tadir>-korrnum = '7000'.
|
||||
ENDIF.
|
||||
WHEN 'DTEL'.
|
||||
<ls_tadir>-korrnum = '8000'.
|
||||
WHEN 'DOMA'.
|
||||
<ls_tadir>-korrnum = '9000'.
|
||||
WHEN 'PROG'.
|
||||
* delete includes after main programs
|
||||
SELECT COUNT(*) FROM reposrc
|
||||
WHERE progname = <ls_tadir>-obj_name
|
||||
AND r3state = 'A'
|
||||
AND subc = 'I'.
|
||||
IF sy-subrc = 0.
|
||||
<ls_tadir>-korrnum = '2000'.
|
||||
ELSE.
|
||||
<ls_tadir>-korrnum = '1000'.
|
||||
ENDIF.
|
||||
WHEN OTHERS.
|
||||
<ls_tadir>-korrnum = '1000'.
|
||||
ENDCASE.
|
||||
ENDLOOP.
|
||||
|
||||
resolve_ddic( CHANGING ct_tadir = lt_tadir ).
|
||||
|
||||
resolve_ddls( CHANGING ct_tadir = lt_tadir ).
|
||||
|
||||
SORT lt_tadir BY korrnum ASCENDING.
|
||||
zcl_abapgit_dependencies=>resolve( CHANGING ct_tadir = lt_tadir ).
|
||||
|
||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||
lcl_progress=>show( iv_key = 'Delete'
|
||||
|
@ -365,120 +316,6 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "delete
|
||||
|
||||
METHOD resolve_ddic.
|
||||
* this will make sure the deletion sequence of structures/tables work
|
||||
* in case they have dependencies with .INCLUDE
|
||||
|
||||
TYPES: BEGIN OF ty_edge,
|
||||
from TYPE zif_abapgit_definitions=>ty_item,
|
||||
to TYPE zif_abapgit_definitions=>ty_item,
|
||||
END OF ty_edge.
|
||||
|
||||
DATA: lt_nodes TYPE TABLE OF zif_abapgit_definitions=>ty_item,
|
||||
lt_edges TYPE TABLE OF ty_edge,
|
||||
lt_findstrings TYPE TABLE OF rsfind,
|
||||
lv_plus TYPE i VALUE 1,
|
||||
lv_find_obj_cls TYPE euobj-id,
|
||||
lv_index TYPE i,
|
||||
lv_before TYPE i,
|
||||
lt_founds TYPE TABLE OF rsfindlst,
|
||||
lt_scope TYPE STANDARD TABLE OF seu_obj.
|
||||
|
||||
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF ct_tadir,
|
||||
<ls_edge> LIKE LINE OF lt_edges,
|
||||
<ls_found> LIKE LINE OF lt_founds,
|
||||
<ls_node> LIKE LINE OF lt_nodes.
|
||||
|
||||
|
||||
* build nodes
|
||||
LOOP AT ct_tadir ASSIGNING <ls_tadir>
|
||||
WHERE object = 'TABL'
|
||||
OR object = 'TTYP'.
|
||||
APPEND INITIAL LINE TO lt_nodes ASSIGNING <ls_node>.
|
||||
<ls_node>-obj_name = <ls_tadir>-obj_name.
|
||||
<ls_node>-obj_type = <ls_tadir>-object.
|
||||
ENDLOOP.
|
||||
|
||||
APPEND 'TABL' TO lt_scope.
|
||||
APPEND 'STRU' TO lt_scope.
|
||||
APPEND 'TTYP' TO lt_scope.
|
||||
|
||||
* build edges
|
||||
LOOP AT lt_nodes ASSIGNING <ls_node>.
|
||||
|
||||
CLEAR lt_findstrings.
|
||||
APPEND <ls_node>-obj_name TO lt_findstrings.
|
||||
lv_find_obj_cls = <ls_node>-obj_type.
|
||||
|
||||
CALL FUNCTION 'RS_EU_CROSSREF'
|
||||
EXPORTING
|
||||
i_find_obj_cls = lv_find_obj_cls
|
||||
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 <> 0.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
|
||||
LOOP AT lt_founds ASSIGNING <ls_found>.
|
||||
APPEND INITIAL LINE TO lt_edges ASSIGNING <ls_edge>.
|
||||
<ls_edge>-from = <ls_node>.
|
||||
|
||||
<ls_edge>-to-obj_name = <ls_found>-object.
|
||||
CASE <ls_found>-object_cls.
|
||||
WHEN 'DS'
|
||||
OR 'DT'.
|
||||
<ls_edge>-to-obj_type = 'TABL'.
|
||||
WHEN 'DA'.
|
||||
<ls_edge>-to-obj_type = 'TTYP'.
|
||||
WHEN OTHERS.
|
||||
zcx_abapgit_exception=>raise( 'resolve_ddic, unknown object_cls' ).
|
||||
ENDCASE.
|
||||
ENDLOOP.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
DO.
|
||||
lv_before = lines( lt_nodes ).
|
||||
LOOP AT lt_nodes ASSIGNING <ls_node>.
|
||||
lv_index = sy-tabix.
|
||||
READ TABLE lt_edges WITH KEY
|
||||
from-obj_name = <ls_node>-obj_name
|
||||
from-obj_type = <ls_node>-obj_type
|
||||
TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
LOOP AT ct_tadir ASSIGNING <ls_tadir>
|
||||
WHERE obj_name = <ls_node>-obj_name
|
||||
AND object = <ls_node>-obj_type.
|
||||
<ls_tadir>-korrnum = <ls_tadir>-korrnum + lv_plus.
|
||||
CONDENSE <ls_tadir>-korrnum.
|
||||
ENDLOOP.
|
||||
DELETE lt_edges
|
||||
WHERE to-obj_name = <ls_node>-obj_name
|
||||
AND to-obj_type = <ls_node>-obj_type.
|
||||
DELETE lt_nodes INDEX lv_index.
|
||||
EXIT. " make sure the sequence is fixed
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
IF lv_before = lines( lt_nodes ).
|
||||
EXIT.
|
||||
ENDIF.
|
||||
lv_plus = lv_plus + 1.
|
||||
ENDDO.
|
||||
|
||||
ENDMETHOD. "resolve_ddic
|
||||
|
||||
METHOD delete_obj.
|
||||
|
||||
DATA: li_obj TYPE REF TO lif_object.
|
||||
|
@ -760,66 +597,4 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD resolve_ddls.
|
||||
|
||||
" As CDS-Views aka DDLS can be dependent on each other,
|
||||
" we wan't to ensure that they are deleted in the right order.
|
||||
" Otherwise deletion is prohibited by standard API
|
||||
|
||||
TYPES: BEGIN OF ty_ddls_name.
|
||||
INCLUDE TYPE ddsymtab.
|
||||
TYPES: END OF ty_ddls_name.
|
||||
|
||||
TYPES: tty_ddls_names TYPE STANDARD TABLE OF ty_ddls_name
|
||||
WITH NON-UNIQUE DEFAULT KEY,
|
||||
BEGIN OF ty_dependency,
|
||||
depname TYPE dd02l-tabname,
|
||||
deptyp TYPE c LENGTH 4,
|
||||
deplocal TYPE dd02l-as4local,
|
||||
refname TYPE dd02l-tabname,
|
||||
reftyp TYPE c LENGTH 4,
|
||||
kind TYPE c LENGTH 1,
|
||||
END OF ty_dependency.
|
||||
|
||||
DATA: lt_dependency TYPE STANDARD TABLE OF ty_dependency
|
||||
WITH NON-UNIQUE DEFAULT KEY,
|
||||
lt_ddls_name TYPE tty_ddls_names,
|
||||
ls_ddls_name LIKE LINE OF lt_ddls_name.
|
||||
|
||||
FIELD-SYMBOLS: <tadir_ddls> TYPE zif_abapgit_definitions=>ty_tadir,
|
||||
<dependency> TYPE ty_dependency,
|
||||
<tadir_dependent> TYPE zif_abapgit_definitions=>ty_tadir.
|
||||
|
||||
LOOP AT ct_tadir ASSIGNING <tadir_ddls>
|
||||
WHERE object = 'DDLS'.
|
||||
|
||||
CLEAR: lt_dependency,
|
||||
lt_ddls_name.
|
||||
|
||||
ls_ddls_name-name = <tadir_ddls>-obj_name.
|
||||
INSERT ls_ddls_name INTO TABLE lt_ddls_name.
|
||||
|
||||
PERFORM ('DDLS_GET_DEP') IN PROGRAM ('RADMASDL')
|
||||
TABLES lt_ddls_name lt_dependency.
|
||||
|
||||
LOOP AT lt_dependency ASSIGNING <dependency>
|
||||
WHERE deptyp = 'DDLS'
|
||||
AND refname = <tadir_ddls>-obj_name.
|
||||
|
||||
READ TABLE ct_tadir ASSIGNING <tadir_dependent>
|
||||
WITH KEY pgmid = 'R3TR'
|
||||
object = 'DDLS'
|
||||
obj_name = <dependency>-depname
|
||||
BINARY SEARCH.
|
||||
CHECK sy-subrc = 0.
|
||||
|
||||
<tadir_dependent>-korrnum = <tadir_dependent>-korrnum - 1.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS. "lcl_objects IMPLEMENTATION
|
||||
|
|
286
src/zcl_abapgit_dependencies.clas.abap
Normal file
286
src/zcl_abapgit_dependencies.clas.abap
Normal file
|
@ -0,0 +1,286 @@
|
|||
CLASS zcl_abapgit_dependencies DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_tadir,
|
||||
pgmid TYPE tadir-pgmid,
|
||||
object TYPE tadir-object,
|
||||
obj_name TYPE tadir-obj_name,
|
||||
devclass TYPE tadir-devclass,
|
||||
korrnum TYPE tadir-korrnum,
|
||||
path TYPE string,
|
||||
END OF ty_tadir .
|
||||
TYPES:
|
||||
ty_tadir_tt TYPE STANDARD TABLE OF ty_tadir WITH DEFAULT KEY .
|
||||
|
||||
CLASS-METHODS resolve
|
||||
CHANGING
|
||||
!ct_tadir TYPE ty_tadir_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_dependency,
|
||||
depname TYPE dd02l-tabname,
|
||||
deptyp TYPE c LENGTH 4,
|
||||
deplocal TYPE dd02l-as4local,
|
||||
refname TYPE dd02l-tabname,
|
||||
reftyp TYPE c LENGTH 4,
|
||||
kind TYPE c LENGTH 1,
|
||||
END OF ty_dependency,
|
||||
tty_dedenpency TYPE STANDARD TABLE OF ty_dependency
|
||||
WITH NON-UNIQUE DEFAULT KEY.
|
||||
|
||||
TYPES: BEGIN OF ty_item,
|
||||
obj_type TYPE tadir-object,
|
||||
obj_name TYPE tadir-obj_name,
|
||||
devclass TYPE devclass,
|
||||
END OF ty_item.
|
||||
|
||||
CLASS-METHODS resolve_ddic
|
||||
CHANGING ct_tadir TYPE ty_tadir_tt
|
||||
RAISING zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS get_ddls_dependencies
|
||||
IMPORTING i_ddls_name TYPE tadir-obj_name
|
||||
RETURNING VALUE(rt_dependency) TYPE tty_dedenpency.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_dependencies IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD get_ddls_dependencies.
|
||||
|
||||
TYPES: BEGIN OF ty_ddls_name.
|
||||
INCLUDE TYPE ddsymtab.
|
||||
TYPES: END OF ty_ddls_name.
|
||||
|
||||
TYPES: tty_ddls_names TYPE STANDARD TABLE OF ty_ddls_name
|
||||
WITH NON-UNIQUE DEFAULT KEY.
|
||||
|
||||
DATA: lt_ddls_name TYPE tty_ddls_names,
|
||||
ls_ddls_name LIKE LINE OF lt_ddls_name.
|
||||
|
||||
ls_ddls_name-name = i_ddls_name.
|
||||
INSERT ls_ddls_name INTO TABLE lt_ddls_name.
|
||||
|
||||
PERFORM ('DDLS_GET_DEP') IN PROGRAM ('RADMASDL')
|
||||
TABLES lt_ddls_name rt_dependency.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD resolve.
|
||||
|
||||
DATA: lv_tabclass TYPE dd02l-tabclass.
|
||||
|
||||
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF ct_tadir.
|
||||
|
||||
* misuse field KORRNUM to fix deletion sequence
|
||||
|
||||
LOOP AT ct_tadir ASSIGNING <ls_tadir>.
|
||||
CASE <ls_tadir>-object.
|
||||
WHEN 'IATU'.
|
||||
<ls_tadir>-korrnum = '5500'.
|
||||
WHEN 'IARP'.
|
||||
<ls_tadir>-korrnum = '5510'.
|
||||
WHEN 'IASP'.
|
||||
<ls_tadir>-korrnum = '5520'.
|
||||
WHEN 'SUSC'.
|
||||
<ls_tadir>-korrnum = '5000'.
|
||||
WHEN 'TTYP' OR 'TABL' OR 'VIEW'.
|
||||
SELECT SINGLE tabclass FROM dd02l
|
||||
INTO lv_tabclass
|
||||
WHERE tabname = <ls_tadir>-obj_name
|
||||
AND as4local = 'A'
|
||||
AND as4vers = '0000'.
|
||||
IF sy-subrc = 0 AND lv_tabclass = 'APPEND'.
|
||||
* delete append structures before database tables
|
||||
<ls_tadir>-korrnum = '6500'.
|
||||
ELSE.
|
||||
<ls_tadir>-korrnum = '7000'.
|
||||
ENDIF.
|
||||
WHEN 'DTEL'.
|
||||
<ls_tadir>-korrnum = '8000'.
|
||||
WHEN 'DOMA'.
|
||||
<ls_tadir>-korrnum = '9000'.
|
||||
WHEN 'PROG'.
|
||||
* delete includes after main programs
|
||||
SELECT COUNT(*) FROM reposrc
|
||||
WHERE progname = <ls_tadir>-obj_name
|
||||
AND r3state = 'A'
|
||||
AND subc = 'I'.
|
||||
IF sy-subrc = 0.
|
||||
<ls_tadir>-korrnum = '2000'.
|
||||
ELSE.
|
||||
<ls_tadir>-korrnum = '1000'.
|
||||
ENDIF.
|
||||
WHEN OTHERS.
|
||||
<ls_tadir>-korrnum = '1000'.
|
||||
ENDCASE.
|
||||
ENDLOOP.
|
||||
|
||||
resolve_ddic( CHANGING ct_tadir = ct_tadir ).
|
||||
|
||||
SORT ct_tadir BY korrnum ASCENDING.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD resolve_ddic.
|
||||
* this will make sure the deletion sequence of structures/tables work
|
||||
* in case they have dependencies with .INCLUDE
|
||||
|
||||
TYPES: BEGIN OF ty_edge,
|
||||
from TYPE ty_item,
|
||||
to TYPE ty_item,
|
||||
END OF ty_edge.
|
||||
|
||||
DATA: lt_nodes TYPE TABLE OF ty_item,
|
||||
lt_edges TYPE TABLE OF ty_edge,
|
||||
lt_findstrings TYPE TABLE OF rsfind,
|
||||
lv_plus TYPE i VALUE 1,
|
||||
lv_find_obj_cls TYPE euobj-id,
|
||||
lv_index TYPE i,
|
||||
lv_before TYPE i,
|
||||
lt_founds TYPE TABLE OF rsfindlst,
|
||||
lt_scope TYPE STANDARD TABLE OF seu_obj.
|
||||
|
||||
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF ct_tadir,
|
||||
<ls_edge> LIKE LINE OF lt_edges,
|
||||
<ls_found> LIKE LINE OF lt_founds,
|
||||
<ls_node> LIKE LINE OF lt_nodes.
|
||||
|
||||
DATA: lt_dependency TYPE tty_dedenpency.
|
||||
FIELD-SYMBOLS: <tadir_ddls> TYPE ty_tadir,
|
||||
<dependency> TYPE ty_dependency,
|
||||
<tadir_dependent> TYPE ty_tadir.
|
||||
|
||||
* build nodes
|
||||
LOOP AT ct_tadir ASSIGNING <ls_tadir>
|
||||
WHERE object = 'TABL'
|
||||
OR object = 'TTYP'.
|
||||
APPEND INITIAL LINE TO lt_nodes ASSIGNING <ls_node>.
|
||||
<ls_node>-obj_name = <ls_tadir>-obj_name.
|
||||
<ls_node>-obj_type = <ls_tadir>-object.
|
||||
ENDLOOP.
|
||||
|
||||
APPEND 'TABL' TO lt_scope.
|
||||
APPEND 'STRU' TO lt_scope.
|
||||
APPEND 'TTYP' TO lt_scope.
|
||||
|
||||
* build edges
|
||||
LOOP AT lt_nodes ASSIGNING <ls_node>.
|
||||
|
||||
CLEAR lt_findstrings.
|
||||
APPEND <ls_node>-obj_name TO lt_findstrings.
|
||||
lv_find_obj_cls = <ls_node>-obj_type.
|
||||
|
||||
CALL FUNCTION 'RS_EU_CROSSREF'
|
||||
EXPORTING
|
||||
i_find_obj_cls = lv_find_obj_cls
|
||||
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 <> 0.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
|
||||
LOOP AT lt_founds ASSIGNING <ls_found>.
|
||||
APPEND INITIAL LINE TO lt_edges ASSIGNING <ls_edge>.
|
||||
<ls_edge>-from = <ls_node>.
|
||||
|
||||
<ls_edge>-to-obj_name = <ls_found>-object.
|
||||
CASE <ls_found>-object_cls.
|
||||
WHEN 'DS'
|
||||
OR 'DT'.
|
||||
<ls_edge>-to-obj_type = 'TABL'.
|
||||
WHEN 'DA'.
|
||||
<ls_edge>-to-obj_type = 'TTYP'.
|
||||
WHEN OTHERS.
|
||||
zcx_abapgit_exception=>raise( 'resolve_ddic, unknown object_cls' ).
|
||||
ENDCASE.
|
||||
ENDLOOP.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
* build DDLS edges
|
||||
LOOP AT ct_tadir ASSIGNING <tadir_ddls>
|
||||
WHERE object = 'DDLS'.
|
||||
|
||||
CLEAR: lt_dependency.
|
||||
|
||||
APPEND INITIAL LINE TO lt_nodes ASSIGNING <ls_node>.
|
||||
<ls_node>-obj_name = <tadir_ddls>-obj_name.
|
||||
<ls_node>-obj_type = <tadir_ddls>-object.
|
||||
|
||||
lt_dependency = get_ddls_dependencies( <tadir_ddls>-obj_name ).
|
||||
|
||||
LOOP AT lt_dependency ASSIGNING <dependency>
|
||||
WHERE deptyp = 'DDLS'
|
||||
AND refname = <tadir_ddls>-obj_name.
|
||||
|
||||
READ TABLE ct_tadir ASSIGNING <tadir_dependent>
|
||||
WITH KEY pgmid = 'R3TR'
|
||||
object = 'DDLS'
|
||||
obj_name = <dependency>-depname
|
||||
BINARY SEARCH.
|
||||
CHECK sy-subrc = 0.
|
||||
|
||||
APPEND INITIAL LINE TO lt_edges ASSIGNING <ls_edge>.
|
||||
<ls_edge>-from = <ls_node>.
|
||||
<ls_edge>-to-obj_name = <dependency>-depname.
|
||||
<ls_edge>-to-obj_type = 'DDLS'.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
DO.
|
||||
lv_before = lines( lt_nodes ).
|
||||
LOOP AT lt_nodes ASSIGNING <ls_node>.
|
||||
lv_index = sy-tabix.
|
||||
READ TABLE lt_edges WITH KEY
|
||||
from-obj_name = <ls_node>-obj_name
|
||||
from-obj_type = <ls_node>-obj_type
|
||||
TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc <> 0.
|
||||
LOOP AT ct_tadir ASSIGNING <ls_tadir>
|
||||
WHERE obj_name = <ls_node>-obj_name
|
||||
AND object = <ls_node>-obj_type.
|
||||
<ls_tadir>-korrnum = <ls_tadir>-korrnum + lv_plus.
|
||||
CONDENSE <ls_tadir>-korrnum.
|
||||
ENDLOOP.
|
||||
DELETE lt_edges
|
||||
WHERE to-obj_name = <ls_node>-obj_name
|
||||
AND to-obj_type = <ls_node>-obj_type.
|
||||
DELETE lt_nodes INDEX lv_index.
|
||||
EXIT. " make sure the sequence is fixed
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
IF lv_before = lines( lt_nodes ).
|
||||
EXIT.
|
||||
ENDIF.
|
||||
lv_plus = lv_plus + 1.
|
||||
ENDDO.
|
||||
|
||||
ENDMETHOD. "resolve_ddic
|
||||
ENDCLASS.
|
19
src/zcl_abapgit_dependencies.clas.xml
Normal file
19
src/zcl_abapgit_dependencies.clas.xml
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?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_DEPENDENCIES</CLSNAME>
|
||||
<VERSION>1</VERSION>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>DDIC Dependencies</DESCRIPT>
|
||||
<EXPOSURE>2</EXPOSURE>
|
||||
<STATE>1</STATE>
|
||||
<CLSFINAL>X</CLSFINAL>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
Loading…
Reference in New Issue
Block a user