CLASS zcl_abapgit_object_iobj DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL. PUBLIC SECTION. INTERFACES zif_abapgit_object. PROTECTED SECTION. PRIVATE SECTION. METHODS: clear_field IMPORTING iv_fieldname TYPE string CHANGING cg_metadata TYPE any. ENDCLASS. CLASS zcl_abapgit_object_iobj IMPLEMENTATION. METHOD clear_field. FIELD-SYMBOLS: TYPE data. ASSIGN COMPONENT iv_fieldname OF STRUCTURE cg_metadata TO . ASSERT sy-subrc = 0. CLEAR: . ENDMETHOD. METHOD zif_abapgit_object~changed_by. DATA: lv_objna TYPE c LENGTH 30, lr_viobj TYPE REF TO data. FIELD-SYMBOLS: TYPE any, TYPE any. lv_objna = ms_item-obj_name. TRY. CREATE DATA lr_viobj TYPE ('RSD_S_VIOBJ'). CATCH cx_sy_create_data_error. zcx_abapgit_exception=>raise( |IOBJ is not supported on this system| ). ENDTRY. ASSIGN lr_viobj->* TO . CALL FUNCTION 'RSD_IOBJ_GET' EXPORTING i_iobjnm = lv_objna i_objvers = 'A' IMPORTING e_s_viobj = EXCEPTIONS iobj_not_found = 1 illegal_input = 2 bct_comp_invalid = 3 * not_authorized = 4 " not in lower releases OTHERS = 5. IF sy-subrc = 0. ASSIGN COMPONENT 'TSTPNM' OF STRUCTURE TO . rv_user = . ENDIF. ENDMETHOD. METHOD zif_abapgit_object~delete. TYPES: BEGIN OF ty_iobj, objnm TYPE c LENGTH 30. TYPES END OF ty_iobj. DATA: lt_iobjname TYPE STANDARD TABLE OF ty_iobj, lv_subrc TYPE sy-subrc. APPEND ms_item-obj_name TO lt_iobjname. CALL FUNCTION 'RSDG_IOBJ_MULTI_DELETE' EXPORTING i_t_iobjnm = lt_iobjname i_check_dependent = abap_false i_manual = abap_false IMPORTING e_subrc = lv_subrc. IF lv_subrc <> 0. zcx_abapgit_exception=>raise( |Error when deleting InfoObject { ms_item-obj_name }| ). ENDIF. corr_insert( iv_package ). TRY. " In case of IOBJ dependencies, tadir entry might be leftover so we remove it tadir_delete( ). CATCH zcx_abapgit_exception ##NO_HANDLER. ENDTRY. ENDMETHOD. METHOD zif_abapgit_object~deserialize. DATA: lr_details TYPE REF TO data, lr_infoobj TYPE REF TO data, ls_return TYPE bapiret2, lt_return TYPE STANDARD TABLE OF bapiret2, lr_compounds TYPE REF TO data, lr_attributes TYPE REF TO data, lr_navigationattributes TYPE REF TO data, lr_atrnavinfoprovider TYPE REF TO data, lr_hierarchycharacteristics TYPE REF TO data, lr_elimination TYPE REF TO data, lr_hanafieldsmapping TYPE REF TO data, lr_xxlattributes TYPE REF TO data. FIELD-SYMBOLS: TYPE any, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE data, TYPE STANDARD TABLE. TRY. CREATE DATA lr_details TYPE ('BAPI6108'). CREATE DATA lr_compounds TYPE STANDARD TABLE OF ('BAPI6108CM'). CREATE DATA lr_attributes TYPE STANDARD TABLE OF ('BAPI6108AT'). CREATE DATA lr_navigationattributes TYPE STANDARD TABLE OF ('BAPI6108AN'). CREATE DATA lr_atrnavinfoprovider TYPE STANDARD TABLE OF ('BAPI6108NP'). CREATE DATA lr_hierarchycharacteristics TYPE STANDARD TABLE OF ('BAPI6108HC'). CREATE DATA lr_elimination TYPE STANDARD TABLE OF ('BAPI6108IE'). CREATE DATA lr_hanafieldsmapping TYPE STANDARD TABLE OF ('BAPI6108HANA_MAP'). CREATE DATA lr_xxlattributes TYPE STANDARD TABLE OF ('BAPI6108ATXXL'). CREATE DATA lr_infoobj TYPE STANDARD TABLE OF ('BAPI6108'). CATCH cx_sy_create_data_error. zcx_abapgit_exception=>raise( |IOBJ is not supported on this system| ). ENDTRY. ASSIGN lr_details->* TO . ASSIGN lr_compounds->* TO . ASSIGN lr_attributes->* TO . ASSIGN lr_navigationattributes->* TO . ASSIGN lr_atrnavinfoprovider->* TO . ASSIGN lr_hierarchycharacteristics->* TO . ASSIGN lr_elimination->* TO . ASSIGN lr_hanafieldsmapping->* TO . ASSIGN lr_xxlattributes->* TO . ASSIGN lr_infoobj->* TO . io_xml->read( EXPORTING iv_name = 'IOBJ' CHANGING cg_data = ). io_xml->read( EXPORTING iv_name = 'COMPOUNDS' CHANGING cg_data = ). io_xml->read( EXPORTING iv_name = 'ATTRIBUTES' CHANGING cg_data = ). io_xml->read( EXPORTING iv_name = 'NAVIGATION_ATTRIBUTES' CHANGING cg_data = ). io_xml->read( EXPORTING iv_name = 'ATTR_NAVIGATION' CHANGING cg_data = ). io_xml->read( EXPORTING iv_name = 'HIERARCHY' CHANGING cg_data = ). io_xml->read( EXPORTING iv_name = 'ELIMINATION' CHANGING cg_data = ). io_xml->read( EXPORTING iv_name = 'HANA_FIELDS_MAPPING' CHANGING cg_data = ). io_xml->read( EXPORTING iv_name = 'XXL_ATTRIBUTES' CHANGING cg_data = ). " Number ranges are local (should not have been serialized) clear_field( EXPORTING iv_fieldname = 'NUMBRANR' CHANGING cg_metadata = ). TRY. ASSIGN COMPONENT 'INFOOBJECT' OF STRUCTURE TO . ASSERT sy-subrc = 0. IF zif_abapgit_object~exists( ) = abap_false. TRY. CALL FUNCTION 'BAPI_IOBJ_CREATE' EXPORTING details = IMPORTING return = ls_return TABLES compounds = attributes = navigationattributes = atrnavinfoprovider = hierarchycharacteristics = elimination = hanafieldsmapping = xxlattributes = ##ARG_OK. CATCH cx_sy_dyn_call_param_not_found. CALL FUNCTION 'BAPI_IOBJ_CREATE' EXPORTING details = IMPORTING return = ls_return TABLES compounds = attributes = navigationattributes = atrnavinfoprovider = hierarchycharacteristics = elimination = . ENDTRY. ELSE. TRY. CALL FUNCTION 'BAPI_IOBJ_CHANGE' EXPORTING infoobject = details = IMPORTING return = ls_return TABLES compounds = attributes = navigationattributes = atrnavinfoprovider = hierarchycharacteristics = elimination = hanafieldsmapping = xxlattributes = ##ARG_OK. CATCH cx_sy_dyn_call_param_not_found. CALL FUNCTION 'BAPI_IOBJ_CHANGE' EXPORTING infoobject = details = IMPORTING return = ls_return TABLES compounds = attributes = navigationattributes = atrnavinfoprovider = hierarchycharacteristics = elimination = . ENDTRY. ENDIF. IF ls_return-type = 'E'. zcx_abapgit_exception=>raise( |Error when creating iobj: { ls_return-message }| ). ENDIF. APPEND TO . CALL FUNCTION 'BAPI_IOBJ_ACTIVATE_MULTIPLE' TABLES infoobjects = return = lt_return. READ TABLE lt_return WITH KEY type = 'E' INTO ls_return. IF sy-subrc = 0. zcx_abapgit_exception=>raise( |Error when activating iobj: { ls_return-message }| ). ENDIF. CATCH cx_sy_dyn_call_illegal_func. zcx_abapgit_exception=>raise( |Necessary BW function modules not found| ). ENDTRY. tadir_insert( iv_package ). corr_insert( iv_package ). ENDMETHOD. METHOD zif_abapgit_object~exists. DATA: lv_iobjnm TYPE c LENGTH 30. SELECT SINGLE iobjnm FROM ('RSDIOBJ') INTO lv_iobjnm WHERE iobjnm = ms_item-obj_name. rv_bool = boolc( sy-subrc = 0 ). ENDMETHOD. METHOD zif_abapgit_object~get_comparator. RETURN. ENDMETHOD. METHOD zif_abapgit_object~get_deserialize_order. 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. DATA: lv_objna TYPE c LENGTH 30, lr_viobj TYPE REF TO data. FIELD-SYMBOLS: TYPE any, TYPE any. lv_objna = ms_item-obj_name. TRY. CREATE DATA lr_viobj TYPE ('RSD_S_VIOBJ'). CATCH cx_sy_create_data_error. zcx_abapgit_exception=>raise( |IOBJ is not supported on this system| ). ENDTRY. ASSIGN lr_viobj->* TO . CALL FUNCTION 'RSD_IOBJ_GET' EXPORTING i_iobjnm = lv_objna i_objvers = 'A' IMPORTING e_s_viobj = . ASSIGN COMPONENT 'OBJSTAT' OF STRUCTURE TO . IF = 'ACT' AND sy-subrc = 0. rv_active = abap_true. ENDIF. ENDMETHOD. METHOD zif_abapgit_object~is_locked. DATA: lv_object TYPE eqegraarg. lv_object = ms_item-obj_name. OVERLAY lv_object WITH ' '. lv_object = lv_object && '*'. rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'E_BIW_PROV' iv_argument = lv_object ). ENDMETHOD. METHOD zif_abapgit_object~jump. " Covered by ZCL_ABAPGIT_OBJECTS=>JUMP ENDMETHOD. METHOD zif_abapgit_object~map_filename_to_object. RETURN. ENDMETHOD. METHOD zif_abapgit_object~map_object_to_filename. RETURN. ENDMETHOD. METHOD zif_abapgit_object~serialize. DATA: lv_iobjnam TYPE rsiobjnm, ls_return TYPE bapiret2, lr_details TYPE REF TO data, lr_compounds TYPE REF TO data, lr_attributes TYPE REF TO data, lr_navigationattributes TYPE REF TO data, lr_atrnavinfoprovider TYPE REF TO data, lr_hierarchycharacteristics TYPE REF TO data, lr_elimination TYPE REF TO data, lr_hanafieldsmapping TYPE REF TO data, lr_xxlattributes TYPE REF TO data. FIELD-SYMBOLS: TYPE any, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE STANDARD TABLE. TRY. CREATE DATA lr_details TYPE ('BAPI6108'). CREATE DATA lr_compounds TYPE STANDARD TABLE OF ('BAPI6108CM'). CREATE DATA lr_attributes TYPE STANDARD TABLE OF ('BAPI6108AT'). CREATE DATA lr_navigationattributes TYPE STANDARD TABLE OF ('BAPI6108AN'). CREATE DATA lr_atrnavinfoprovider TYPE STANDARD TABLE OF ('BAPI6108NP'). CREATE DATA lr_hierarchycharacteristics TYPE STANDARD TABLE OF ('BAPI6108HC'). CREATE DATA lr_elimination TYPE STANDARD TABLE OF ('BAPI6108IE'). CREATE DATA lr_hanafieldsmapping TYPE STANDARD TABLE OF ('BAPI6108HANA_MAP'). CREATE DATA lr_xxlattributes TYPE STANDARD TABLE OF ('BAPI6108ATXXL'). CATCH cx_sy_create_data_error. zcx_abapgit_exception=>raise( |IOBJ is not supported on this system| ). ENDTRY. ASSIGN lr_details->* TO . ASSIGN lr_compounds->* TO . ASSIGN lr_attributes->* TO . ASSIGN lr_navigationattributes->* TO . ASSIGN lr_atrnavinfoprovider->* TO . ASSIGN lr_hierarchycharacteristics->* TO . ASSIGN lr_elimination->* TO . ASSIGN lr_hanafieldsmapping->* TO . ASSIGN lr_xxlattributes->* TO . lv_iobjnam = ms_item-obj_name. TRY. CALL FUNCTION 'BAPI_IOBJ_GETDETAIL' EXPORTING infoobject = lv_iobjnam IMPORTING details = return = ls_return TABLES compounds = attributes = navigationattributes = atrnavinfoprovider = hierarchycharacteristics = elimination = hanafieldsmapping = xxlattributes = ##ARG_OK. CATCH cx_sy_dyn_call_param_not_found. CALL FUNCTION 'BAPI_IOBJ_GETDETAIL' EXPORTING infoobject = lv_iobjnam IMPORTING details = return = ls_return TABLES compounds = attributes = navigationattributes = atrnavinfoprovider = hierarchycharacteristics = elimination = . ENDTRY. IF ls_return-type = 'E'. zcx_abapgit_exception=>raise( |Error getting details of InfoObject: { ls_return-message }| ). ENDIF. clear_field( EXPORTING iv_fieldname = 'TSTPNM' CHANGING cg_metadata = ). clear_field( EXPORTING iv_fieldname = 'TIMESTMP' CHANGING cg_metadata = ). clear_field( EXPORTING iv_fieldname = 'DBROUTID' CHANGING cg_metadata = ). " Number ranges are local clear_field( EXPORTING iv_fieldname = 'NUMBRANR' CHANGING cg_metadata = ). io_xml->add( iv_name = 'IOBJ' ig_data = ). io_xml->add( iv_name = 'COMPOUNDS' ig_data = ). io_xml->add( iv_name = 'ATTRIBUTES' ig_data = ). io_xml->add( iv_name = 'NAVIGATION_ATTRIBUTES' ig_data = ). io_xml->add( iv_name = 'ATTR_NAVIGATION' ig_data = ). io_xml->add( iv_name = 'HIERARCHY' ig_data = ). io_xml->add( iv_name = 'ELIMINATION' ig_data = ). io_xml->add( iv_name = 'HANA_FIELDS_MAPPING' ig_data = ). io_xml->add( iv_name = 'XXL_ATTRIBUTES' ig_data = ). ENDMETHOD. ENDCLASS.