mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
DOMA: Fix domains with custom conversion exit (#5998)
This commit is contained in:
parent
6f4f336437
commit
1a5199a5e3
|
@ -40,6 +40,24 @@ CLASS zcl_abapgit_object_doma DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
|
|||
!it_dd07v TYPE dd07v_tab
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
METHODS handle_dependencies
|
||||
IMPORTING
|
||||
!iv_step TYPE zif_abapgit_definitions=>ty_deserialization_step
|
||||
CHANGING
|
||||
!cv_exit TYPE dd01v-convexit
|
||||
!cv_done TYPE abap_bool.
|
||||
|
||||
METHODS adjust_exit
|
||||
CHANGING
|
||||
!cv_exit TYPE dd01v-convexit.
|
||||
|
||||
METHODS check_exit
|
||||
IMPORTING
|
||||
!iv_exit TYPE dd01v-convexit
|
||||
RETURNING
|
||||
VALUE(rv_done) TYPE abap_bool.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -47,6 +65,45 @@ ENDCLASS.
|
|||
CLASS zcl_abapgit_object_doma IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD adjust_exit.
|
||||
|
||||
DATA lv_function TYPE funcname.
|
||||
|
||||
IF cv_exit IS NOT INITIAL.
|
||||
lv_function = |CONVERSION_EXIT_{ cv_exit }_INPUT|.
|
||||
|
||||
" If exit function does not exist, remove it
|
||||
CALL FUNCTION 'FUNCTION_EXISTS'
|
||||
EXPORTING
|
||||
funcname = lv_function
|
||||
EXCEPTIONS
|
||||
function_not_exist = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc <> 0.
|
||||
cv_exit = ''.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD check_exit.
|
||||
|
||||
DATA lv_exit TYPE dd01v-convexit.
|
||||
|
||||
rv_done = abap_true.
|
||||
|
||||
IF iv_exit IS NOT INITIAL.
|
||||
" Check if exit function is set correctly
|
||||
SELECT SINGLE convexit FROM dd01v INTO lv_exit WHERE domname = ms_item-obj_name.
|
||||
IF sy-subrc = 0 AND lv_exit <> iv_exit.
|
||||
rv_done = abap_false.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD deserialize_texts.
|
||||
|
||||
DATA: lv_name TYPE ddobjname,
|
||||
|
@ -125,6 +182,27 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD handle_dependencies.
|
||||
|
||||
" For domains with dependency on conversion exit function, we use two phases:
|
||||
" 1) DDIC phase:
|
||||
" - If function does not exit, remove the exit function
|
||||
" 2) LATE phase
|
||||
" - If function was removed, change it to the correct exit function
|
||||
CASE iv_step.
|
||||
WHEN zif_abapgit_object=>gc_step_id-ddic.
|
||||
adjust_exit( CHANGING cv_exit = cv_exit ).
|
||||
|
||||
WHEN zif_abapgit_object=>gc_step_id-late.
|
||||
cv_done = check_exit( cv_exit ).
|
||||
|
||||
WHEN OTHERS.
|
||||
ASSERT 0 = 1.
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD serialize_texts.
|
||||
|
||||
DATA: lv_name TYPE ddobjname,
|
||||
|
@ -258,10 +336,8 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
|
|||
* package SEDD
|
||||
* package SDIC
|
||||
|
||||
* fm TR_TADIR_INTERFACE
|
||||
* fm RS_CORR_INSERT ?
|
||||
|
||||
DATA: lv_name TYPE ddobjname,
|
||||
lv_done TYPE abap_bool,
|
||||
ls_dd01v TYPE dd01v,
|
||||
lt_dd07v TYPE TABLE OF dd07v.
|
||||
|
||||
|
@ -272,6 +348,17 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
|
|||
io_xml->read( EXPORTING iv_name = 'DD07V_TAB'
|
||||
CHANGING cg_data = lt_dd07v ).
|
||||
|
||||
handle_dependencies(
|
||||
EXPORTING
|
||||
iv_step = iv_step
|
||||
CHANGING
|
||||
cv_exit = ls_dd01v-convexit
|
||||
cv_done = lv_done ).
|
||||
|
||||
IF lv_done = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
corr_insert( iv_package = iv_package
|
||||
ig_object_class = 'DICT' ).
|
||||
|
||||
|
@ -329,6 +416,7 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
|
|||
|
||||
METHOD zif_abapgit_object~get_deserialize_steps.
|
||||
APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps.
|
||||
APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user