mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
DDIC: Improve active/inactive check (#5486)
* DDIC: Improve active/inactive check Use `is_active_ddic` (function `DDIF_STATE_GET`) for all DDIC object types. This is more accurate than the current method (function `RS_INACTIVE_OBJECTS_WARNING`) since it detects newly created but not active objects as well. * Fix const * Remove "no active version" error * Update comment Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
a96fed4b26
commit
5127bfdb9d
|
@ -353,6 +353,7 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
|
|||
METHOD zif_abapgit_object~serialize.
|
||||
|
||||
DATA: lv_name TYPE ddobjname,
|
||||
lv_state TYPE ddgotstate,
|
||||
ls_dd01v TYPE dd01v,
|
||||
lv_masklen TYPE c LENGTH 4,
|
||||
lt_dd07v TYPE TABLE OF dd07v.
|
||||
|
@ -364,8 +365,10 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
|
|||
CALL FUNCTION 'DDIF_DOMA_GET'
|
||||
EXPORTING
|
||||
name = lv_name
|
||||
state = 'A'
|
||||
langu = mv_language
|
||||
IMPORTING
|
||||
gotstate = lv_state
|
||||
dd01v_wa = ls_dd01v
|
||||
TABLES
|
||||
dd07v_tab = lt_dd07v
|
||||
|
@ -376,8 +379,8 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
|
|||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
||||
IF ls_dd01v IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |No active version found for { ms_item-obj_type } { ms_item-obj_name }| ).
|
||||
IF ls_dd01v IS INITIAL OR lv_state <> 'A'.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CLEAR: ls_dd01v-as4user,
|
||||
|
|
|
@ -281,7 +281,7 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION.
|
|||
AND as4local = 'A'
|
||||
AND as4vers = '0000'.
|
||||
IF sy-subrc <> 0 OR ls_dd04v IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |No active version found for { ms_item-obj_type } { ms_item-obj_name }| ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
SELECT SINGLE * FROM dd04t
|
||||
|
|
|
@ -136,6 +136,7 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION.
|
|||
METHOD zif_abapgit_object~serialize.
|
||||
|
||||
DATA: lv_name TYPE ddobjname,
|
||||
lv_state TYPE ddgotstate,
|
||||
ls_dd25v TYPE dd25v,
|
||||
lt_dd26e TYPE TABLE OF dd26e,
|
||||
lt_dd27p TYPE ty_dd27p.
|
||||
|
@ -148,6 +149,7 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION.
|
|||
state = 'A'
|
||||
langu = mv_language
|
||||
IMPORTING
|
||||
gotstate = lv_state
|
||||
dd25v_wa = ls_dd25v
|
||||
TABLES
|
||||
dd26e_tab = lt_dd26e
|
||||
|
@ -159,8 +161,8 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION.
|
|||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
||||
IF ls_dd25v IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |No active version found for { ms_item-obj_type } { ms_item-obj_name }| ).
|
||||
IF ls_dd25v IS INITIAL OR lv_state <> 'A'.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CLEAR: ls_dd25v-as4user,
|
||||
|
|
|
@ -135,6 +135,7 @@ CLASS zcl_abapgit_object_shlp IMPLEMENTATION.
|
|||
METHOD zif_abapgit_object~serialize.
|
||||
|
||||
DATA: lv_name TYPE ddobjname,
|
||||
lv_state TYPE ddgotstate,
|
||||
ls_dd30v TYPE dd30v,
|
||||
lt_dd31v TYPE TABLE OF dd31v,
|
||||
lt_dd32p TYPE TABLE OF dd32p,
|
||||
|
@ -151,6 +152,7 @@ CLASS zcl_abapgit_object_shlp IMPLEMENTATION.
|
|||
state = 'A'
|
||||
langu = mv_language
|
||||
IMPORTING
|
||||
gotstate = lv_state
|
||||
dd30v_wa = ls_dd30v
|
||||
TABLES
|
||||
dd31v_tab = lt_dd31v
|
||||
|
@ -163,8 +165,8 @@ CLASS zcl_abapgit_object_shlp IMPLEMENTATION.
|
|||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
||||
IF ls_dd30v IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |No active version found for { ms_item-obj_type } { ms_item-obj_name }| ).
|
||||
IF ls_dd30v IS INITIAL OR lv_state <> 'A'.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CLEAR: ls_dd30v-as4user,
|
||||
|
|
|
@ -905,7 +905,7 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD zif_abapgit_object~is_active.
|
||||
rv_active = is_active_ddic( ).
|
||||
rv_active = is_active( ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
|
@ -144,6 +144,7 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION.
|
|||
METHOD zif_abapgit_object~serialize.
|
||||
|
||||
DATA: lv_name TYPE ddobjname,
|
||||
lv_state TYPE ddgotstate,
|
||||
lt_dd42v TYPE dd42v_tab,
|
||||
lt_dd43v TYPE dd43v_tab,
|
||||
ls_dd40v TYPE dd40v.
|
||||
|
@ -157,6 +158,7 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION.
|
|||
state = 'A'
|
||||
langu = mv_language
|
||||
IMPORTING
|
||||
gotstate = lv_state
|
||||
dd40v_wa = ls_dd40v
|
||||
TABLES
|
||||
dd42v_tab = lt_dd42v
|
||||
|
@ -169,8 +171,8 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION.
|
|||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
||||
IF ls_dd40v IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |No active version found for { ms_item-obj_type } { ms_item-obj_name }| ).
|
||||
IF ls_dd40v IS INITIAL OR lv_state <> 'A'.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CLEAR: ls_dd40v-as4user,
|
||||
|
|
|
@ -78,7 +78,7 @@ CLASS zcl_abapgit_object_type IMPLEMENTATION.
|
|||
|
||||
lv_typdname = ms_item-obj_name.
|
||||
|
||||
" Active version
|
||||
" Get active version, ignore errors if not found
|
||||
CALL FUNCTION 'TYPD_GET_OBJECT'
|
||||
EXPORTING
|
||||
typdname = lv_typdname
|
||||
|
@ -90,10 +90,7 @@ CLASS zcl_abapgit_object_type IMPLEMENTATION.
|
|||
EXCEPTIONS
|
||||
version_not_found = 1
|
||||
reps_not_exist = 2
|
||||
OTHERS = 3.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise( |No active version found for { ms_item-obj_type } { ms_item-obj_name }| ).
|
||||
ENDIF.
|
||||
OTHERS = 3 ##FM_SUBRC_OK.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -208,6 +205,10 @@ CLASS zcl_abapgit_object_type IMPLEMENTATION.
|
|||
read( IMPORTING ev_ddtext = lv_ddtext
|
||||
et_source = lt_source ).
|
||||
|
||||
IF lt_source IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
io_xml->add( iv_name = 'DDTEXT'
|
||||
ig_data = lv_ddtext ).
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ CLASS zcl_abapgit_object_view DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
|
|||
METHODS:
|
||||
read_view
|
||||
EXPORTING
|
||||
ev_state TYPE ddgotstate
|
||||
es_dd25v TYPE dd25v
|
||||
es_dd09l TYPE dd09l
|
||||
et_dd26v TYPE ty_dd26v
|
||||
|
@ -38,7 +39,6 @@ CLASS zcl_abapgit_object_view DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
|
|||
et_dd28v TYPE ty_dd28v
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -58,6 +58,7 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION.
|
|||
state = 'A'
|
||||
langu = mv_language
|
||||
IMPORTING
|
||||
gotstate = ev_state
|
||||
dd25v_wa = es_dd25v
|
||||
dd09l_wa = es_dd09l
|
||||
TABLES
|
||||
|
@ -235,6 +236,7 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION.
|
|||
METHOD zif_abapgit_object~serialize.
|
||||
|
||||
DATA: ls_dd25v TYPE dd25v,
|
||||
lv_state TYPE ddgotstate,
|
||||
ls_dd09l TYPE dd09l,
|
||||
lt_dd26v TYPE ty_dd26v,
|
||||
lt_dd27p TYPE ty_dd27p,
|
||||
|
@ -245,6 +247,7 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION.
|
|||
|
||||
read_view(
|
||||
IMPORTING
|
||||
ev_state = lv_state
|
||||
es_dd25v = ls_dd25v
|
||||
es_dd09l = ls_dd09l
|
||||
et_dd26v = lt_dd26v
|
||||
|
@ -252,8 +255,8 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION.
|
|||
et_dd28j = lt_dd28j
|
||||
et_dd28v = lt_dd28v ).
|
||||
|
||||
IF ls_dd25v IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |No active version found for { ms_item-obj_type } { ms_item-obj_name }| ).
|
||||
IF ls_dd25v IS INITIAL OR lv_state <> 'A'.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CLEAR: ls_dd25v-as4user,
|
||||
|
|
|
@ -82,12 +82,12 @@ CLASS zcl_abapgit_objects_super DEFINITION
|
|||
!ii_xml TYPE REF TO zif_abapgit_xml_input
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
PRIVATE SECTION.
|
||||
METHODS is_active_ddic
|
||||
RETURNING
|
||||
VALUE(rv_active) TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -279,10 +279,20 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
|
|||
|
||||
METHOD is_active.
|
||||
|
||||
" DDIC types (see LSINTF01, FORM det_dtabname)
|
||||
CONSTANTS lc_ddic_type TYPE string
|
||||
VALUE 'DDLS,DOMA,DTEL,ENQU,INDX,MCID,MCOB,SHLP,SQLT,SQSC,STOB,TABL,TTYP,VIEW,XINX'.
|
||||
|
||||
DATA: lt_messages TYPE STANDARD TABLE OF sprot_u WITH DEFAULT KEY,
|
||||
lt_e071_tadirs TYPE STANDARD TABLE OF e071 WITH DEFAULT KEY,
|
||||
ls_e071_tadir LIKE LINE OF lt_e071_tadirs.
|
||||
|
||||
" For DDIC types, use more accurate method
|
||||
IF lc_ddic_type CS ms_item-obj_type.
|
||||
rv_active = is_active_ddic( ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ms_item-inactive = abap_false.
|
||||
|
||||
ls_e071_tadir-object = ms_item-obj_type.
|
||||
|
@ -303,6 +313,7 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
|
|||
ENDIF.
|
||||
|
||||
rv_active = boolc( ms_item-inactive = abap_false ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -318,11 +329,15 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
|
|||
lv_type = ms_item-obj_type.
|
||||
lv_name = ms_item-obj_name.
|
||||
|
||||
" Check if an inactive version of the DDIC object exists
|
||||
" state = 'A' checks if an active version exists but does not detect new or modified objects
|
||||
" state = 'M' checks for all possible versions so we can find out if an inactive one exists
|
||||
" See documentation of the function module
|
||||
CALL FUNCTION 'DDIF_STATE_GET'
|
||||
EXPORTING
|
||||
type = lv_type
|
||||
name = lv_name
|
||||
state = 'A'
|
||||
state = 'M'
|
||||
IMPORTING
|
||||
gotstate = lv_state
|
||||
EXCEPTIONS
|
||||
|
@ -333,7 +348,6 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
|
|||
ENDIF.
|
||||
|
||||
rv_active = boolc( ms_item-inactive = abap_false ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user