abapGit/src/objects/zcl_abapgit_object_sxci.clas.abap
Marc Bernard 3fa3323b2e
Refactor: Jump to Object Logic (#5158)
* Refactor: Jump to Object Logic

Continue #5114

- Removes jump_adt and jump_se11 from zcl_abapgit_objects_super
- Remove almost all object-specific jump handlers (zif_abapgit_object~jump) since they are covered by GUI Jumper now

* Remove ZCL_ABAPGIT_OBJECT_SICF

* Remove obsolete RS_TOOL_ACCESS

* FUGR

* IATU

* PDXX

* SRVD

* XINX

Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Christian Günter <christianguenter@googlemail.com>
2021-11-29 15:52:13 -05:00

278 lines
8.4 KiB
ABAP

CLASS zcl_abapgit_object_sxci DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES: BEGIN OF ty_classic_badi_implementation,
implementation_data TYPE impl_data,
function_codes TYPE seex_fcode_table,
control_composites TYPE seex_coco_table,
customer_includes TYPE seex_table_table,
screens TYPE seex_screen_table,
filters TYPE seex_filter_table,
END OF ty_classic_badi_implementation.
ENDCLASS.
CLASS zcl_abapgit_object_sxci IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by.
SELECT SINGLE uname FROM sxc_attr INTO rv_user WHERE imp_name = ms_item-obj_name.
IF sy-subrc <> 0.
rv_user = c_user_unknown.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: lv_implementation_name TYPE rsexscrn-imp_name.
lv_implementation_name = ms_item-obj_name.
CALL FUNCTION 'SXO_IMPL_DELETE'
EXPORTING
imp_name = lv_implementation_name
no_dialog = abap_true
EXCEPTIONS
imp_not_existing = 1
action_canceled = 2
access_failure = 3
data_inconsistency = 4
OTHERS = 5.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_badi_definition TYPE badi_data,
lo_filter_object TYPE REF TO cl_badi_flt_struct,
lo_filter_values_object TYPE REF TO cl_badi_flt_values_alv,
lv_korrnum TYPE trkorr,
lv_filter_type_enhanceability TYPE rsexscrn-flt_ext,
lv_package TYPE devclass,
ls_classic_badi_implementation TYPE ty_classic_badi_implementation.
io_xml->read(
EXPORTING
iv_name = 'SXCI'
CHANGING
cg_data = ls_classic_badi_implementation ).
CALL FUNCTION 'SXO_BADI_READ'
EXPORTING
exit_name = ls_classic_badi_implementation-implementation_data-exit_name
IMPORTING
badi = ls_badi_definition
filter_obj = lo_filter_object
EXCEPTIONS
read_failure = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
lv_package = iv_package.
CREATE OBJECT lo_filter_values_object
EXPORTING
filter_object = lo_filter_object
filter_values = ls_classic_badi_implementation-filters.
CALL FUNCTION 'SXO_IMPL_SAVE'
EXPORTING
impl = ls_classic_badi_implementation-implementation_data
flt_ext = lv_filter_type_enhanceability
filter_val_obj = lo_filter_values_object
genflag = abap_true
no_dialog = abap_true
TABLES
fcodes_to_insert = ls_classic_badi_implementation-function_codes
cocos_to_insert = ls_classic_badi_implementation-control_composites
intas_to_insert = ls_classic_badi_implementation-customer_includes
sscrs_to_insert = ls_classic_badi_implementation-screens
CHANGING
korrnum = lv_korrnum
devclass = lv_package
EXCEPTIONS
save_failure = 1
action_canceled = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
CALL FUNCTION 'SXO_IMPL_ACTIVE'
EXPORTING
imp_name = ls_classic_badi_implementation-implementation_data-imp_name
no_dialog = abap_true
EXCEPTIONS
badi_not_existing = 1
imp_not_existing = 2
already_active = 3
data_inconsistency = 4
activation_not_admissable = 5
action_canceled = 6
access_failure = 7
OTHERS = 8.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: lv_implementation_name TYPE rsexscrn-imp_name.
lv_implementation_name = ms_item-obj_name.
CALL FUNCTION 'SXV_IMP_EXISTS'
EXPORTING
imp_name = lv_implementation_name
EXCEPTIONS
not_existing = 1
data_inconsistency = 2
OTHERS = 3.
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_steps.
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~is_active.
rv_active = is_active( ).
"Note: SAP does not show inactive classic BAdIs as "Inactive objects" in SE80
"Therefore, rv_active will always be true. The implementation state (runtime
"behaviour of the BAdI) will be serialized as part of the XML
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
" Covered by ZCL_ABAPGIT_OBJECTS=>JUMP
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lv_implementation_name TYPE rsexscrn-imp_name,
lv_exit_name TYPE rsexscrn-exit_name,
lo_filter_object TYPE REF TO cl_badi_flt_struct,
ls_badi_definition TYPE badi_data,
lo_filter_values_object TYPE REF TO cl_badi_flt_values_alv,
lt_methods TYPE seex_mtd_table,
ls_classic_badi_implementation TYPE ty_classic_badi_implementation.
lv_implementation_name = ms_item-obj_name.
CALL FUNCTION 'SXV_EXIT_FOR_IMP'
EXPORTING
imp_name = lv_implementation_name
IMPORTING
exit_name = lv_exit_name
TABLES
filters = ls_classic_badi_implementation-filters
EXCEPTIONS
data_inconsistency = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
CALL FUNCTION 'SXO_BADI_READ'
EXPORTING
exit_name = lv_exit_name
IMPORTING
badi = ls_badi_definition
filter_obj = lo_filter_object
TABLES
fcodes = ls_classic_badi_implementation-function_codes
cocos = ls_classic_badi_implementation-control_composites
intas = ls_classic_badi_implementation-customer_includes
scrns = ls_classic_badi_implementation-screens
methods = lt_methods
EXCEPTIONS
read_failure = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
CALL FUNCTION 'SXO_IMPL_FOR_BADI_READ'
EXPORTING
imp_name = lv_implementation_name
exit_name = lv_exit_name
inter_name = ls_badi_definition-inter_name
filter_obj = lo_filter_object
no_create_filter_values_obj = abap_true
IMPORTING
impl = ls_classic_badi_implementation-implementation_data
filter_values_obj = lo_filter_values_object
TABLES
fcodes = ls_classic_badi_implementation-function_codes
cocos = ls_classic_badi_implementation-control_composites
intas = ls_classic_badi_implementation-customer_includes
scrns = ls_classic_badi_implementation-screens
CHANGING
methods = lt_methods
EXCEPTIONS
read_failure = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
CLEAR: ls_classic_badi_implementation-implementation_data-aname,
ls_classic_badi_implementation-implementation_data-adate,
ls_classic_badi_implementation-implementation_data-atime,
ls_classic_badi_implementation-implementation_data-uname,
ls_classic_badi_implementation-implementation_data-udate,
ls_classic_badi_implementation-implementation_data-utime.
io_xml->add( iv_name = 'SXCI'
ig_data = ls_classic_badi_implementation ).
ENDMETHOD.
ENDCLASS.