mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 20:32:26 +08:00
Improve object handler for CDS metadata extension (DDLX) (#2816)
* fixes issue #2815 The existing object handler for CDS metadata extension (DDLX) has been reviewed by an expert. Doing this, the following feedback has been provided: enable existing logging capability include environment specific logic (e.g. import of an inactive version) improve exception handling so that the related object information can be displayed in log assign package information to handle abap language version ina proper way adapt lock object * fixes saplint issues * fixes saplint issues * fixes saplint issues * extract dependency injection for TADIR_INSERT * fixes saplint issues * zcl_abapgit_environment.clas.testclasses.abap set to master version * changes related to code review * redo changes * redo changes * back to master version
This commit is contained in:
parent
88a5b4cd50
commit
d623d20d03
|
@ -3,28 +3,21 @@ CLASS zcl_abapgit_object_ddlx DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
INTERFACES zif_abapgit_object.
|
INTERFACES zif_abapgit_object.
|
||||||
ALIASES mo_files FOR zif_abapgit_object~mo_files.
|
ALIASES mo_files FOR zif_abapgit_object~mo_files.
|
||||||
|
|
||||||
PROTECTED SECTION.
|
|
||||||
DATA: mo_persistence TYPE REF TO if_wb_object_persist.
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
METHODS:
|
DATA mo_persistence TYPE REF TO if_wb_object_persist .
|
||||||
get_persistence
|
METHODS get_persistence
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(ri_persistence) TYPE REF TO if_wb_object_persist
|
VALUE(ri_persistence) TYPE REF TO if_wb_object_persist
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception,
|
zcx_abapgit_exception .
|
||||||
|
METHODS clear_fields
|
||||||
clear_fields
|
|
||||||
CHANGING
|
CHANGING
|
||||||
cs_data TYPE any,
|
!cs_data TYPE any .
|
||||||
|
METHODS clear_field
|
||||||
clear_field
|
|
||||||
IMPORTING
|
IMPORTING
|
||||||
iv_fieldname TYPE csequence
|
!iv_fieldname TYPE csequence
|
||||||
CHANGING
|
CHANGING
|
||||||
cs_metadata TYPE any.
|
!cs_metadata TYPE any .
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,21 +111,19 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
|
||||||
METHOD zif_abapgit_object~delete.
|
METHOD zif_abapgit_object~delete.
|
||||||
|
|
||||||
DATA: lv_object_key TYPE seu_objkey,
|
DATA: lv_object_key TYPE seu_objkey,
|
||||||
li_data_model TYPE REF TO if_wb_object_data_model,
|
|
||||||
lx_error TYPE REF TO cx_root.
|
lx_error TYPE REF TO cx_root.
|
||||||
|
|
||||||
|
|
||||||
lv_object_key = ms_item-obj_name.
|
lv_object_key = ms_item-obj_name.
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
CREATE OBJECT li_data_model TYPE ('CL_DDLX_WB_OBJECT_DATA').
|
|
||||||
|
|
||||||
get_persistence( )->delete( p_object_key = lv_object_key
|
get_persistence( )->delete( p_object_key = lv_object_key
|
||||||
p_version = swbm_version_active ).
|
p_version = swbm_version_active ).
|
||||||
|
|
||||||
CATCH cx_root INTO lx_error.
|
CATCH cx_root INTO lx_error.
|
||||||
zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( )
|
zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( )
|
||||||
ix_previous = lx_error ).
|
ix_previous = lx_error->previous ).
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
@ -146,7 +137,8 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <lg_data> TYPE any,
|
FIELD-SYMBOLS: <lg_data> TYPE any,
|
||||||
<lg_source> TYPE data,
|
<lg_source> TYPE data,
|
||||||
<lg_version> TYPE data.
|
<lg_version> TYPE data,
|
||||||
|
<lg_package> TYPE data.
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
CREATE DATA lr_data
|
CREATE DATA lr_data
|
||||||
|
@ -166,7 +158,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
|
||||||
" If the file doesn't exist that's ok, because previously
|
" If the file doesn't exist that's ok, because previously
|
||||||
" the source code was stored in the xml. We are downward compatible.
|
" the source code was stored in the xml. We are downward compatible.
|
||||||
<lg_source> = mo_files->read_string( 'asddlxs' ) ##no_text.
|
<lg_source> = mo_files->read_string( 'asddlxs' ) ##no_text.
|
||||||
CATCH zcx_abapgit_exception.
|
CATCH zcx_abapgit_exception ##NO_HANDLER.
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
|
||||||
CREATE OBJECT li_data_model
|
CREATE OBJECT li_data_model
|
||||||
|
@ -179,6 +171,12 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
|
||||||
" and also creates transport request entry if necessary
|
" and also creates transport request entry if necessary
|
||||||
<lg_version> = 'inactive'.
|
<lg_version> = 'inactive'.
|
||||||
|
|
||||||
|
"package needed to be able to determine ABAP language version
|
||||||
|
ASSIGN COMPONENT 'METADATA-PACKAGE_REF-NAME' OF STRUCTURE <lg_data> TO <lg_package>.
|
||||||
|
IF <lg_package> IS ASSIGNED.
|
||||||
|
<lg_package> = iv_package.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
li_data_model->set_data( <lg_data> ).
|
li_data_model->set_data( <lg_data> ).
|
||||||
|
|
||||||
get_persistence( )->save( li_data_model ).
|
get_persistence( )->save( li_data_model ).
|
||||||
|
@ -187,7 +185,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
|
||||||
|
|
||||||
CATCH cx_root INTO lx_error.
|
CATCH cx_root INTO lx_error.
|
||||||
zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( )
|
zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( )
|
||||||
ix_previous = lx_error ).
|
ix_previous = lx_error->previous ).
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
|
||||||
zcl_abapgit_objects_activation=>add_item( ms_item ).
|
zcl_abapgit_objects_activation=>add_item( ms_item ).
|
||||||
|
@ -238,7 +236,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD zif_abapgit_object~is_locked.
|
METHOD zif_abapgit_object~is_locked.
|
||||||
|
|
||||||
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT'
|
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESWB_EO'
|
||||||
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
|
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
@ -279,12 +277,33 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
|
||||||
TYPE ('CL_DDLX_WB_OBJECT_DATA').
|
TYPE ('CL_DDLX_WB_OBJECT_DATA').
|
||||||
|
|
||||||
li_persistence = get_persistence( ).
|
li_persistence = get_persistence( ).
|
||||||
|
|
||||||
|
IF zcl_abapgit_factory=>get_environment( )->compare_with_inactive( ) = abap_true.
|
||||||
|
"Retrieve inactive version
|
||||||
|
li_persistence->get(
|
||||||
|
EXPORTING
|
||||||
|
p_object_key = lv_object_key
|
||||||
|
p_version = swbm_version_inactive
|
||||||
|
CHANGING
|
||||||
|
p_object_data = li_data_model ).
|
||||||
|
IF li_data_model->get_object_name( ) IS INITIAL.
|
||||||
|
"Fallback: retrieve active version
|
||||||
li_persistence->get(
|
li_persistence->get(
|
||||||
EXPORTING
|
EXPORTING
|
||||||
p_object_key = lv_object_key
|
p_object_key = lv_object_key
|
||||||
p_version = swbm_version_active
|
p_version = swbm_version_active
|
||||||
CHANGING
|
CHANGING
|
||||||
p_object_data = li_data_model ).
|
p_object_data = li_data_model ).
|
||||||
|
ENDIF.
|
||||||
|
ELSE.
|
||||||
|
"Retrieve active version
|
||||||
|
li_persistence->get(
|
||||||
|
EXPORTING
|
||||||
|
p_object_key = lv_object_key
|
||||||
|
p_version = swbm_version_active
|
||||||
|
CHANGING
|
||||||
|
p_object_data = li_data_model ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
li_data_model->get_data(
|
li_data_model->get_data(
|
||||||
IMPORTING
|
IMPORTING
|
||||||
|
@ -305,7 +324,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
|
||||||
|
|
||||||
CATCH cx_root INTO lx_error.
|
CATCH cx_root INTO lx_error.
|
||||||
zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( )
|
zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( )
|
||||||
ix_previous = lx_error ).
|
ix_previous = lx_error->previous ).
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user