abapGit/src/objects/enh/zcl_abapgit_object_enhs_hook_d.clas.abap
2025-04-08 11:10:59 +02:00

108 lines
3.6 KiB
ABAP

CLASS zcl_abapgit_object_enhs_hook_d DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES: zif_abapgit_object_enhs.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES: BEGIN OF ty_hook_defifnition,
pgmid TYPE tadir-pgmid,
obj_name TYPE trobj_name,
obj_type TYPE trobjtype,
main_type TYPE trobjtype,
main_name TYPE eu_aname,
program TYPE progname,
def_hooks TYPE enh_hook_def_ext_it,
END OF ty_hook_defifnition.
ENDCLASS.
CLASS zcl_abapgit_object_enhs_hook_d IMPLEMENTATION.
METHOD zif_abapgit_object_enhs~deserialize.
DATA: lv_enh_shorttext TYPE string,
ls_enh_hook_definition TYPE enh_hook_def,
ls_hook_definition TYPE ty_hook_defifnition,
li_enh_object TYPE REF TO if_enh_object,
li_enh_object_docu TYPE REF TO if_enh_object_docu,
lo_hookdef_tool TYPE REF TO cl_enh_tool_hook_def,
lx_enh_root TYPE REF TO cx_enh_root.
FIELD-SYMBOLS: <ls_hook_definition> TYPE enh_hook_def_ext.
ii_xml->read( EXPORTING iv_name = 'SHORTTEXT'
CHANGING cg_data = lv_enh_shorttext ).
ii_xml->read( EXPORTING iv_name = 'BADI_DATA'
CHANGING cg_data = ls_hook_definition ).
li_enh_object ?= ii_enh_spot_tool.
li_enh_object_docu ?= ii_enh_spot_tool.
TRY.
li_enh_object_docu->set_shorttext( lv_enh_shorttext ).
lo_hookdef_tool ?= ii_enh_spot_tool.
lo_hookdef_tool->set_original_object( pgmid = ls_hook_definition-pgmid
obj_name = ls_hook_definition-obj_name
obj_type = ls_hook_definition-obj_type
program = ls_hook_definition-program
main_type = ls_hook_definition-main_type
main_name = ls_hook_definition-main_name ).
LOOP AT ls_hook_definition-def_hooks ASSIGNING <ls_hook_definition>.
MOVE-CORRESPONDING <ls_hook_definition> TO ls_enh_hook_definition.
lo_hookdef_tool->add_hook_def( ls_enh_hook_definition ).
ENDLOOP.
li_enh_object->save( ).
li_enh_object->activate( ).
li_enh_object->unlock( ).
CATCH cx_enh_root INTO lx_enh_root.
zcx_abapgit_exception=>raise_with_text( lx_enh_root ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object_enhs~serialize.
DATA: lo_hookdef_tool TYPE REF TO cl_enh_tool_hook_def,
lv_enh_shorttext TYPE string,
li_enh_object_docu TYPE REF TO if_enh_object_docu,
ls_hook_definition TYPE ty_hook_defifnition.
lo_hookdef_tool ?= ii_enh_spot_tool.
li_enh_object_docu ?= ii_enh_spot_tool.
lv_enh_shorttext = li_enh_object_docu->get_shorttext( ).
ls_hook_definition-def_hooks = lo_hookdef_tool->get_hook_defs( ).
lo_hookdef_tool->get_original_object(
IMPORTING
pgmid = ls_hook_definition-pgmid
obj_name = ls_hook_definition-obj_name
obj_type = ls_hook_definition-obj_type
main_type = ls_hook_definition-main_type
main_name = ls_hook_definition-main_name
program = ls_hook_definition-program ).
ii_xml->add( ig_data = ii_enh_spot_tool->get_tool( )
iv_name = 'TOOL' ).
ii_xml->add( ig_data = lv_enh_shorttext
iv_name = 'SHORTTEXT' ).
ii_xml->add( ig_data = ls_hook_definition
iv_name = 'BADI_DATA' ).
ENDMETHOD.
ENDCLASS.