CLASS zcl_abapgit_object_sfbf DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL. PUBLIC SECTION. INTERFACES zif_abapgit_object. METHODS constructor IMPORTING !is_item TYPE zif_abapgit_definitions=>ty_item !iv_language TYPE spras !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL RAISING zcx_abapgit_exception. PROTECTED SECTION. PRIVATE SECTION. CONSTANTS c_longtext_id_sfbf TYPE dokil-id VALUE 'BF'. DATA mv_bf TYPE sfw_bfunction. METHODS: unlock, activate RAISING zcx_abapgit_exception, create RETURNING VALUE(ro_bf) TYPE REF TO cl_sfw_bf RAISING zcx_abapgit_exception, get RETURNING VALUE(ro_bf) TYPE REF TO cl_sfw_bf RAISING zcx_abapgit_exception. ENDCLASS. CLASS zcl_abapgit_object_sfbf IMPLEMENTATION. METHOD activate. DATA: lt_bfuncts TYPE sfw_bftab, lt_msgtab TYPE sprot_u_tab. IF zif_abapgit_object~is_active( ) = abap_true. RETURN. ENDIF. APPEND mv_bf TO lt_bfuncts. cl_sfw_activate=>activate_sfbf( EXPORTING p_bfuncts = lt_bfuncts p_version = 'I' 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 activating SFBF' ). ENDIF. ENDMETHOD. METHOD constructor. super->constructor( is_item = is_item iv_language = iv_language io_files = io_files io_i18n_params = io_i18n_params ). mv_bf = is_item-obj_name. ENDMETHOD. METHOD create. TRY. " make sure to clear cache ro_bf = cl_sfw_bf=>create_bf( mv_bf ). ro_bf->free( ). ro_bf = cl_sfw_bf=>create_bf( mv_bf ). CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. zcx_abapgit_exception=>raise( 'Error from CL_SFW_BF=>CREATE_BF' ). ENDTRY. ENDMETHOD. METHOD get. TRY. " make sure to clear cache, method GET_BF_FROM_DB does not exist in 702 ro_bf = cl_sfw_bf=>get_bf( mv_bf ). ro_bf->free( ). ro_bf = cl_sfw_bf=>get_bf( mv_bf ). CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. zcx_abapgit_exception=>raise( 'Error from CL_SFW_BF=>GET_BF' ). ENDTRY. ENDMETHOD. METHOD unlock. CALL FUNCTION 'DEQUEUE_EEUDB' EXPORTING relid = 'SF' name = ms_item-obj_name _synchron = 'X' _scope = '1' mode_eudb = abap_true. ENDMETHOD. METHOD zif_abapgit_object~changed_by. DATA: ls_data TYPE sfw_bf. 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: lt_delete TYPE sfw_bftab, lt_msgtab TYPE sprot_u_tab. APPEND mv_bf TO lt_delete. cl_sfw_activate=>delete_sfbf( EXPORTING p_bfuncts = 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 SFBF' ). ENDIF. corr_insert( iv_package ). ENDMETHOD. METHOD zif_abapgit_object~deserialize. DATA: lo_bf TYPE REF TO cl_sfw_bf, ls_header TYPE sfw_bf, lv_name_32 TYPE sfw_name32, lv_name_80 TYPE sfw_name80, lt_assigned_switches TYPE sfw_swbf_outtab, lt_dependancies TYPE sfw_depend_outtab, ls_sfw_bfc_kw TYPE sfw_bfc_kw, ls_sfw_bfc_tc TYPE sfw_bfc_tc, ls_sfw_bfc_rn TYPE sfw_bfc_rn, lt_parent_bfs TYPE sfw_bs_bf_outtab. IF iv_step = zif_abapgit_object=>gc_step_id-late. activate( ). RETURN. ENDIF. 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_SWITCHES' CHANGING cg_data = lt_assigned_switches ). io_xml->read( EXPORTING iv_name = 'DEPENDANCIES' CHANGING cg_data = lt_dependancies ). io_xml->read( EXPORTING iv_name = 'CONTENT_KW' CHANGING cg_data = ls_sfw_bfc_kw ). io_xml->read( EXPORTING iv_name = 'CONTENT_TC' CHANGING cg_data = ls_sfw_bfc_tc ). io_xml->read( EXPORTING iv_name = 'CONTENT_RN' CHANGING cg_data = ls_sfw_bfc_rn ). io_xml->read( EXPORTING iv_name = 'PARENT_BFS' CHANGING cg_data = lt_parent_bfs ). TRY. IF zif_abapgit_object~exists( ) = abap_true. lo_bf = get( ). ELSE. lo_bf = create( ). ENDIF. CATCH cx_pak_not_authorized cx_pak_invalid_state cx_pak_invalid_data. zcx_abapgit_exception=>raise( 'error in CL_SFW_BF=>CREATE_BF' ). ENDTRY. ls_header-author = sy-uname. ls_header-createdon = sy-datum. " Get component from package SELECT SINGLE dlvunit FROM tdevc INTO ls_header-component WHERE devclass = iv_package. lo_bf->set_header_data( ls_header ). lo_bf->set_texts( p_32 = lv_name_32 p_80 = lv_name_80 ). lo_bf->set_assigned_switches( lt_assigned_switches ). lo_bf->set_excluded_bf( lt_dependancies ). lo_bf->set_content_data( im_sfw_bfc_kw = ls_sfw_bfc_kw im_sfw_bfc_rn = ls_sfw_bfc_rn im_sfw_bfc_tc = ls_sfw_bfc_tc ). lo_bf->set_parent_bfs( lt_parent_bfs ). set_default_package( iv_package ). tadir_insert( iv_package ). lo_bf->save_all( ). unlock( ). deserialize_longtexts( ii_xml = io_xml iv_longtext_id = c_longtext_id_sfbf ). zcl_abapgit_objects_activation=>add_item( ms_item ). ENDMETHOD. METHOD zif_abapgit_object~exists. DATA: ls_tadir TYPE tadir, lv_bf TYPE sfw_bfunction. lv_bf = ms_item-obj_name. IF cl_sfw_bf=>check_existence( lv_bf ) = 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_order. RETURN. ENDMETHOD. 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. METHOD zif_abapgit_object~get_metadata. rs_metadata = get_metadata( ). ENDMETHOD. METHOD zif_abapgit_object~is_active. rv_active = is_active( ). ENDMETHOD. METHOD zif_abapgit_object~is_locked. rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB' iv_argument = ms_item-obj_name iv_prefix = 'SF' ). 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: lo_bf TYPE REF TO cl_sfw_bf, ls_header TYPE sfw_bf, lv_name_32 TYPE sfw_name32, lv_name_80 TYPE sfw_name80, lt_assigned_switches TYPE sfw_swbf_outtab, lt_dependancies TYPE sfw_depend_outtab, ls_sfw_bfc_kw TYPE sfw_bfc_kw, ls_sfw_bfc_tc TYPE sfw_bfc_tc, ls_sfw_bfc_rn TYPE sfw_bfc_rn, lt_parent_bfs TYPE sfw_bs_bf_outtab. IF zif_abapgit_object~exists( ) = abap_false. RETURN. ENDIF. lo_bf = get( ). ls_header = lo_bf->get_header_data( ). CLEAR: ls_header-author, ls_header-version, ls_header-component, ls_header-createdon, ls_header-changedby, ls_header-changedon, ls_header-timestamp. lo_bf->get_texts( IMPORTING p_32 = lv_name_32 p_80 = lv_name_80 ). lt_assigned_switches = lo_bf->get_assigned_switches( ). lt_dependancies = lo_bf->get_excluded_bf( ). lo_bf->get_content_data( IMPORTING ex_sfw_bfc_kw = ls_sfw_bfc_kw ex_sfw_bfc_tc = ls_sfw_bfc_tc ex_sfw_bfc_rn = ls_sfw_bfc_rn ). lt_parent_bfs = lo_bf->get_parent_bfs( ). 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_switches iv_name = 'ASSIGNED_SWITCHES' ). io_xml->add( ig_data = lt_dependancies iv_name = 'DEPENDANCIES' ). io_xml->add( ig_data = ls_sfw_bfc_kw iv_name = 'CONTENT_KW' ). io_xml->add( ig_data = ls_sfw_bfc_tc iv_name = 'CONTENT_TC' ). io_xml->add( ig_data = ls_sfw_bfc_rn iv_name = 'CONTENT_RN' ). io_xml->add( ig_data = lt_parent_bfs iv_name = 'PARENT_BFS' ). serialize_longtexts( ii_xml = io_xml iv_longtext_id = c_longtext_id_sfbf ). ENDMETHOD. ENDCLASS.