CLASS zcl_abapgit_object_sfbs DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL. PUBLIC SECTION. INTERFACES zif_abapgit_object. PROTECTED SECTION. PRIVATE SECTION. METHODS: get RETURNING VALUE(ro_bfs) TYPE REF TO cl_sfw_bfs RAISING zcx_abapgit_exception. ENDCLASS. CLASS ZCL_ABAPGIT_OBJECT_SFBS IMPLEMENTATION. METHOD get. DATA: lv_bfset TYPE sfw_bset. lv_bfset = ms_item-obj_name. TRY. ro_bfs = cl_sfw_bfs=>get_bfs( lv_bfset ). ro_bfs->free( ). ro_bfs = cl_sfw_bfs=>get_bfs( lv_bfset ). CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. zcx_abapgit_exception=>raise( 'Error from CL_SFW_BFS=>GET_BFS' ). ENDTRY. ENDMETHOD. METHOD zif_abapgit_object~changed_by. DATA: ls_data TYPE sfw_bs. ls_data = get( )->get_header_data( ). rv_user = ls_data-changedby. IF rv_user IS INITIAL. rv_user = ls_data-author. ENDIF. ENDMETHOD. METHOD zif_abapgit_object~delete. DATA: lv_bfset TYPE sfw_bset, lt_delete TYPE sfw_bstab, lt_msgtab TYPE sprot_u_tab. lv_bfset = ms_item-obj_name. APPEND lv_bfset TO lt_delete. cl_sfw_activate=>delete_sfbs( EXPORTING p_bsets = lt_delete IMPORTING p_msgtab = lt_msgtab ). READ TABLE lt_msgtab WITH KEY severity = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. zcx_abapgit_exception=>raise( 'Error deleting SFBS' ). ENDIF. ENDMETHOD. METHOD zif_abapgit_object~deserialize. DATA: lv_bfset TYPE sfw_bset, lo_bfs TYPE REF TO cl_sfw_bfs, ls_header TYPE sfw_bs, lv_name_32 TYPE sfw_name32, lv_name_80 TYPE sfw_name80, lt_assigned_bf TYPE sfw_bfbs_outtab, lt_nested_bfs TYPE sfw_bsbs_outtab, lt_parent_bfs TYPE sfw_bs_bs_parent_outtab. io_xml->read( EXPORTING iv_name = 'HEADER' CHANGING cg_data = ls_header ). io_xml->read( EXPORTING iv_name = 'NAME32' CHANGING cg_data = lv_name_32 ). io_xml->read( EXPORTING iv_name = 'NAME80' CHANGING cg_data = lv_name_80 ). io_xml->read( EXPORTING iv_name = 'ASSIGNED_BF' CHANGING cg_data = lt_assigned_bf ). io_xml->read( EXPORTING iv_name = 'NESTED_BFS' CHANGING cg_data = lt_nested_bfs ). io_xml->read( EXPORTING iv_name = 'PARENT_BFS' CHANGING cg_data = lt_parent_bfs ). lv_bfset = ms_item-obj_name. TRY. lo_bfs = cl_sfw_bfs=>create_bfs( lv_bfset ). CATCH cx_pak_not_authorized cx_pak_invalid_state cx_pak_invalid_data. zcx_abapgit_exception=>raise( 'error in CL_SFW_BFS=>CREATE_BFS' ). ENDTRY. ls_header-author = sy-uname. ls_header-createdon = sy-datum. lo_bfs->set_header_data( ls_header ). lo_bfs->set_texts( p_32 = lv_name_32 p_80 = lv_name_80 ). lo_bfs->set_assigned_bf( lt_assigned_bf ). lo_bfs->set_assigned_bfs( lt_nested_bfs ). lo_bfs->set_nested_parent( lt_parent_bfs ). set_default_package( iv_package ). tadir_insert( iv_package ). lo_bfs->save_all( ). zcl_abapgit_objects_activation=>add_item( ms_item ). ENDMETHOD. METHOD zif_abapgit_object~exists. DATA: ls_tadir TYPE tadir, lv_bfset TYPE sfw_bset. lv_bfset = ms_item-obj_name. IF cl_sfw_bfs=>check_existence( lv_bfset ) = abap_false. RETURN. ENDIF. SELECT SINGLE * FROM tadir INTO ls_tadir WHERE pgmid = 'R3TR' AND object = ms_item-obj_type AND obj_name = ms_item-obj_name. IF ls_tadir IS INITIAL. RETURN. ENDIF. rv_bool = abap_true. ENDMETHOD. METHOD zif_abapgit_object~get_comparator. RETURN. ENDMETHOD. METHOD zif_abapgit_object~get_deserialize_steps. APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps. ENDMETHOD. METHOD zif_abapgit_object~get_metadata. rs_metadata = get_metadata( ). rs_metadata-ddic = abap_true. rs_metadata-delete_tadir = abap_true. ENDMETHOD. METHOD zif_abapgit_object~is_active. rv_active = is_active( ). ENDMETHOD. METHOD zif_abapgit_object~is_locked. rv_is_locked = abap_false. ENDMETHOD. METHOD zif_abapgit_object~jump. CALL FUNCTION 'RS_TOOL_ACCESS' EXPORTING operation = 'SHOW' object_name = ms_item-obj_name object_type = 'SFBS' in_new_window = abap_true. ENDMETHOD. METHOD zif_abapgit_object~serialize. DATA: lo_bfs TYPE REF TO cl_sfw_bfs, ls_header TYPE sfw_bs, lv_name_32 TYPE sfw_name32, lv_name_80 TYPE sfw_name80, lt_assigned_bf TYPE sfw_bfbs_outtab, lt_nested_bfs TYPE sfw_bsbs_outtab, lt_parent_bfs TYPE sfw_bs_bs_parent_outtab. IF zif_abapgit_object~exists( ) = abap_false. RETURN. ENDIF. lo_bfs = get( ). ls_header = lo_bfs->get_header_data( ). CLEAR: ls_header-author, ls_header-createdon, ls_header-changedby, ls_header-changedon, ls_header-timestamp. lo_bfs->get_texts( IMPORTING p_32 = lv_name_32 p_80 = lv_name_80 ). lt_assigned_bf = lo_bfs->get_assigned_bf( ). lt_nested_bfs = lo_bfs->get_nested_bfs( ). lt_parent_bfs = lo_bfs->get_nested_parent( ). io_xml->add( ig_data = ls_header iv_name = 'HEADER' ). io_xml->add( ig_data = lv_name_32 iv_name = 'NAME32' ). io_xml->add( ig_data = lv_name_80 iv_name = 'NAME80' ). io_xml->add( ig_data = lt_assigned_bf iv_name = 'ASSIGNED_BF' ). io_xml->add( ig_data = lt_nested_bfs iv_name = 'NESTED_BFS' ). io_xml->add( ig_data = lt_parent_bfs iv_name = 'PARENT_BFS' ). ENDMETHOD. ENDCLASS.