CLASS zcl_abapgit_object_scp1 DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super CREATE PUBLIC . PUBLIC SECTION. INTERFACES zif_abapgit_object . PROTECTED SECTION. TYPES: BEGIN OF ty_scp1, scprattr TYPE scprattr, scprtext TYPE STANDARD TABLE OF scprtext WITH DEFAULT KEY, scprvals TYPE STANDARD TABLE OF scprvals WITH DEFAULT KEY, scprvall TYPE STANDARD TABLE OF scprvall WITH DEFAULT KEY, scprreca TYPE STANDARD TABLE OF scprreca WITH DEFAULT KEY, scprfldv TYPE STANDARD TABLE OF scprfldv WITH DEFAULT KEY, subprofs TYPE STANDARD TABLE OF scprpprl WITH DEFAULT KEY, END OF ty_scp1 . METHODS dequeue . METHODS enqueue RAISING zcx_abapgit_exception . METHODS save IMPORTING !is_scp1 TYPE ty_scp1 RAISING zcx_abapgit_exception . METHODS save_hier IMPORTING !is_scp1 TYPE ty_scp1 RAISING zcx_abapgit_exception . METHODS adjust_inbound CHANGING !cs_scp1 TYPE ty_scp1 . METHODS adjust_outbound CHANGING !cs_scp1 TYPE ty_scp1 . METHODS load CHANGING !cs_scp1 TYPE ty_scp1 . METHODS load_hier CHANGING !cs_scp1 TYPE ty_scp1 . METHODS call_delete_fms IMPORTING !iv_profile_id TYPE scpr_id RAISING zcx_abapgit_exception . PRIVATE SECTION. ENDCLASS. CLASS zcl_abapgit_object_scp1 IMPLEMENTATION. METHOD adjust_inbound. FIELD-SYMBOLS: TYPE scprvals, TYPE scprreca, TYPE scprvall. * back to internal format LOOP AT cs_scp1-scprvals ASSIGNING . SHIFT -recnumber RIGHT DELETING TRAILING space. ENDLOOP. LOOP AT cs_scp1-scprreca ASSIGNING . SHIFT -recnumber RIGHT DELETING TRAILING space. ENDLOOP. LOOP AT cs_scp1-scprvall ASSIGNING . SHIFT -recnumber RIGHT DELETING TRAILING space. ENDLOOP. ENDMETHOD. METHOD adjust_outbound. FIELD-SYMBOLS: TYPE scprvals, TYPE scprreca, TYPE scprvall. * normalize the XML LOOP AT cs_scp1-scprvals ASSIGNING . CONDENSE -recnumber. ENDLOOP. LOOP AT cs_scp1-scprreca ASSIGNING . CONDENSE -recnumber. ENDLOOP. LOOP AT cs_scp1-scprvall ASSIGNING . CONDENSE -recnumber. ENDLOOP. ENDMETHOD. METHOD call_delete_fms. CONSTANTS: lc_version_new TYPE c VALUE 'N', "Include SCPRINTCONST version_new lc_operation_delete TYPE c VALUE 'D'. DATA: lv_profile_type TYPE scprattr-type, lt_fatherprofiles TYPE STANDARD TABLE OF scproprof WITH DEFAULT KEY, ls_fatherprofile TYPE scproprof. CALL FUNCTION 'SCPR_DB_ATTR_GET_DETAIL' EXPORTING profid = iv_profile_id version = lc_version_new IMPORTING proftype = lv_profile_type EXCEPTIONS OTHERS = 0. CALL FUNCTION 'SCPR_PRSET_DB_USED_IN' EXPORTING profid = iv_profile_id version = lc_version_new TABLES profiles = lt_fatherprofiles. ls_fatherprofile-id = iv_profile_id. APPEND ls_fatherprofile TO lt_fatherprofiles. CALL FUNCTION 'SCPR_CT_TRANSPORT_ENTRIES' TABLES profids = lt_fatherprofiles EXCEPTIONS error_in_transport_layer = 1 user_abort = 2. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |error while deleting SCP1 - TRANSPORT, { sy-subrc }| ). ENDIF. CALL FUNCTION 'SCPR_PRSET_DB_DELETE_ALL' EXPORTING profid = iv_profile_id proftype = lv_profile_type TABLES fatherprofs = lt_fatherprofiles EXCEPTIONS user_abort = 1. IF sy-subrc <> 0. zcx_abapgit_exception=>raise( |error while deleting SCP1 - DB_DELETE, { sy-subrc }| ). ENDIF. CALL FUNCTION 'SCPR_MEM_SCPR_ACTIONS_ADD' EXPORTING bcset_id = iv_profile_id operation = lc_operation_delete. ENDMETHOD. METHOD dequeue. DATA: lv_id TYPE scpr_id. lv_id = ms_item-obj_name. CALL FUNCTION 'SCPR_SV_DEQUEUE_BCSET' EXPORTING bcset_id = lv_id. ENDMETHOD. METHOD enqueue. DATA: lv_id TYPE scpr_id. lv_id = ms_item-obj_name. CALL FUNCTION 'SCPR_SV_ENQUEUE_BCSET' EXPORTING bcset_id = lv_id EXCEPTIONS is_already_locked = 1 system_failure = 2 OTHERS = 3. IF sy-subrc <> 0. zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDMETHOD. METHOD load. CALL FUNCTION 'SCPR_TEMPL_DB_VALS_GET_DETAIL' EXPORTING profid = cs_scp1-scprattr-id category = cs_scp1-scprattr-category TABLES values = cs_scp1-scprvals valuesl = cs_scp1-scprvall recattr = cs_scp1-scprreca. CALL FUNCTION 'SCPR_TEMPL_DB_FLDTXTVAR_GET' EXPORTING bcset_id = cs_scp1-scprattr-id category = cs_scp1-scprattr-category TABLES it_fldv = cs_scp1-scprfldv. ENDMETHOD. METHOD load_hier. CALL FUNCTION 'SCPR_PRSET_DB_SUBP_GET_DETAIL' EXPORTING profid = cs_scp1-scprattr-id category = cs_scp1-scprattr-category TABLES subprofs = cs_scp1-subprofs. ENDMETHOD. METHOD save. DATA: ls_scp1 TYPE ty_scp1, ls_text TYPE scprtext. * copy everything to local, the function module changes the values ls_scp1 = is_scp1. READ TABLE ls_scp1-scprtext INTO ls_text WITH KEY langu = mv_language. "#EC CI_SUBRC CALL FUNCTION 'SCPR_TEMPL_MN_TEMPLATE_SAVE' EXPORTING profid = ls_scp1-scprattr-id proftext = ls_text-text category = ls_scp1-scprattr-category cli_dep = ls_scp1-scprattr-cli_dep cli_cas = ls_scp1-scprattr-cli_cas reftype = ls_scp1-scprattr-reftype refname = ls_scp1-scprattr-refname orgid = ls_scp1-scprattr-orgid component = ls_scp1-scprattr-component minrelease = ls_scp1-scprattr-minrelease maxrelease = ls_scp1-scprattr-maxrelease act_info = ls_scp1-scprattr-act_info bcset_type = ls_scp1-scprattr-type fldtxtvar_supplied = 'YES' with_transp_insert = abap_false with_progress_indicator = abap_false remove_denied_data = abap_true ask_for_cont_after_remove = abap_true TABLES values = ls_scp1-scprvals valuesl = ls_scp1-scprvall recattr = ls_scp1-scprreca it_fldv = ls_scp1-scprfldv texts = ls_scp1-scprtext EXCEPTIONS user_abort = 1 error_in_transport_layer = 2 inconsistent_data = 3 database_error = 4 OTHERS = 5. IF sy-subrc <> 0. zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDMETHOD. METHOD save_hier. DATA: ls_scp1 TYPE ty_scp1, ls_profs LIKE LINE OF ls_scp1-subprofs, lt_sub TYPE STANDARD TABLE OF scproprof WITH DEFAULT KEY, ls_sub LIKE LINE OF lt_sub, ls_text TYPE scprtext. * copy everything to local, the function module changes the values ls_scp1 = is_scp1. READ TABLE ls_scp1-scprtext INTO ls_text WITH KEY langu = mv_language. "#EC CI_SUBRC * see fm SCPR_PRSET_DB_STORE, only this field and sequence is used LOOP AT ls_scp1-subprofs INTO ls_profs. ls_sub-id = ls_profs-subprofile. APPEND ls_sub TO lt_sub. ENDLOOP. CALL FUNCTION 'SCPR_PRSET_MN_BCSET_SAVE' EXPORTING profid = ls_scp1-scprattr-id proftext = ls_text-text category = ls_scp1-scprattr-category cli_dep = ls_scp1-scprattr-cli_dep cli_cas = ls_scp1-scprattr-cli_cas reftype = ls_scp1-scprattr-reftype refname = ls_scp1-scprattr-refname orgid = ls_scp1-scprattr-orgid component = ls_scp1-scprattr-component minrelease = ls_scp1-scprattr-minrelease maxrelease = ls_scp1-scprattr-maxrelease act_info = ls_scp1-scprattr-act_info with_transp_insert = abap_false with_progress_indicator = abap_false TABLES subprofs = lt_sub texts = ls_scp1-scprtext EXCEPTIONS user_abort = 1 error_in_transport_layer = 2 OTHERS = 3. IF sy-subrc <> 0. zcx_abapgit_exception=>raise_t100( ). ENDIF. ENDMETHOD. METHOD zif_abapgit_object~changed_by. SELECT SINGLE modifier INTO rv_user FROM scprattr WHERE id = ms_item-obj_name AND version = 'N'. IF sy-subrc <> 0 OR rv_user IS INITIAL. rv_user = c_user_unknown. ENDIF. ENDMETHOD. METHOD zif_abapgit_object~delete. DATA: lv_profile_id TYPE scpr_id. lv_profile_id = ms_item-obj_name. enqueue( ). call_delete_fms( lv_profile_id ). dequeue( ). ENDMETHOD. METHOD zif_abapgit_object~deserialize. DATA: ls_scp1 TYPE ty_scp1. io_xml->read( EXPORTING iv_name = 'SCP1' CHANGING cg_data = ls_scp1 ). adjust_inbound( CHANGING cs_scp1 = ls_scp1 ). IF ls_scp1-scprattr-type = 'TMP'. save_hier( ls_scp1 ). ELSE. save( ls_scp1 ). ENDIF. dequeue( ). tadir_insert( iv_package ). corr_insert( iv_package ). ENDMETHOD. METHOD zif_abapgit_object~exists. DATA: lv_rc TYPE sy-subrc, lv_profid TYPE scprattr-id. lv_profid = ms_item-obj_name. CALL FUNCTION 'SCPR_BCSET_EXISTS' EXPORTING profid = lv_profid IMPORTING rc = lv_rc. rv_bool = boolc( lv_rc = 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-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 = abap_false. ENDMETHOD. METHOD zif_abapgit_object~jump. DATA: lv_display_only TYPE scpr_txt20, lv_bcset_id TYPE scpr_id. lv_display_only = abap_false. lv_bcset_id = ms_item-obj_name. EXPORT scpr3_display_only = lv_display_only scpr3_bcset_id = lv_bcset_id TO MEMORY ID 'SCPR3_PARAMETER'. SUBMIT scpr3 AND RETURN. rv_exit = abap_true. 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: ls_scp1 TYPE ty_scp1. ls_scp1-scprattr-id = ms_item-obj_name. CALL FUNCTION 'SCPR_DB_ATTR_GET_DETAIL' EXPORTING profid = ls_scp1-scprattr-id IMPORTING proftype = ls_scp1-scprattr-type cli_dep = ls_scp1-scprattr-cli_dep cli_cas = ls_scp1-scprattr-cli_cas reftype = ls_scp1-scprattr-reftype refname = ls_scp1-scprattr-refname component = ls_scp1-scprattr-component minrelease = ls_scp1-scprattr-minrelease maxrelease = ls_scp1-scprattr-maxrelease orgid = ls_scp1-scprattr-orgid act_info = ls_scp1-scprattr-act_info. CALL FUNCTION 'SCPR_TEXT_GET' EXPORTING profid = ls_scp1-scprattr-id category = ls_scp1-scprattr-category TABLES texts = ls_scp1-scprtext EXCEPTIONS no_text_found = 1 OTHERS = 2 ##FM_SUBRC_OK. IF ls_scp1-scprattr-type = 'TMP'. load_hier( CHANGING cs_scp1 = ls_scp1 ). ELSE. load( CHANGING cs_scp1 = ls_scp1 ). ENDIF. adjust_outbound( CHANGING cs_scp1 = ls_scp1 ). io_xml->add( iv_name = 'SCP1' ig_data = ls_scp1 ). ENDMETHOD. ENDCLASS.