CLASS zcl_abapgit_object_oa2p DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL CREATE PUBLIC . PUBLIC SECTION. INTERFACES zif_abapgit_object . METHODS constructor IMPORTING is_item TYPE zif_abapgit_definitions=>ty_item iv_language TYPE spras. PROTECTED SECTION. PRIVATE SECTION. DATA: mv_profile TYPE c LENGTH 30. ENDCLASS. CLASS zcl_abapgit_object_oa2p IMPLEMENTATION. METHOD constructor. super->constructor( is_item = is_item iv_language = iv_language ). mv_profile = is_item-obj_name. ENDMETHOD. METHOD zif_abapgit_object~changed_by. DATA: lo_persist TYPE REF TO object, lr_wb TYPE REF TO data, lo_profile TYPE REF TO object, lv_profile_key TYPE seu_objkey. FIELD-SYMBOLS: TYPE any. lv_profile_key = mv_profile. CREATE OBJECT lo_persist TYPE ('CL_OA2P_OBJECT_PERSIST'). CREATE OBJECT lo_profile TYPE ('CL_OA2P_OBJECT_DATA'). CREATE DATA lr_wb TYPE REF TO ('IF_WB_OBJECT_DATA_MODEL'). ASSIGN lr_wb->* TO . ?= lo_profile. TRY. CALL METHOD lo_persist->('IF_WB_OBJECT_PERSIST~GET') EXPORTING p_object_key = lv_profile_key " Object Key p_version = 'A' " Version (Active/Inactive) CHANGING p_object_data = . " Object Data CATCH cx_swb_object_does_not_exist. zcx_abapgit_exception=>raise( |OAuth2 Profile { lv_profile_key } doesn't exist.| ). CATCH cx_swb_exception. zcx_abapgit_exception=>raise( |Error when geting details of OAuth2 Profile { lv_profile_key }.| ). ENDTRY. lo_profile = . CALL METHOD lo_profile->('IF_WB_OBJECT_DATA_MODEL~GET_CHANGED_BY') RECEIVING p_user_name = rv_user. ENDMETHOD. METHOD zif_abapgit_object~delete. DATA lv_dummy TYPE string. CONSTANTS: lc_actvt TYPE c LENGTH 2 VALUE `06`. DATA: lo_persist TYPE REF TO object, lv_profile_key TYPE seu_objkey. "authority check AUTHORITY-CHECK OBJECT 'S_OA2C_ADM' ID 'ACTVT' FIELD lc_actvt. IF sy-subrc <> 0. MESSAGE e463(01) WITH mv_profile INTO lv_dummy. zcx_abapgit_exception=>raise_t100( ). ENDIF. "delete profile lv_profile_key = mv_profile. CREATE OBJECT lo_persist TYPE ('CL_OA2P_OBJECT_PERSIST'). TRY. CALL METHOD lo_persist->('IF_WB_OBJECT_PERSIST~DELETE') EXPORTING p_object_key = lv_profile_key. " Object Key CATCH cx_swb_object_does_not_exist. CATCH cx_swb_exception. zcx_abapgit_exception=>raise( |Error when deleting OAuth2 Profile { lv_profile_key }.| ). ENDTRY. corr_insert( iv_package ). ENDMETHOD. METHOD zif_abapgit_object~deserialize. DATA: lo_persist TYPE REF TO object, lo_profile TYPE REF TO object, lr_wb TYPE REF TO data, lr_profile_data TYPE REF TO data. FIELD-SYMBOLS: TYPE data, TYPE any. CREATE DATA lr_profile_data TYPE ('OA2C_SX_OA2P_OBJECT_DATA'). ASSIGN lr_profile_data->* TO . io_xml->read( EXPORTING iv_name = 'PROFILE' CHANGING cg_data = ). CREATE OBJECT lo_profile TYPE ('CL_OA2P_OBJECT_DATA'). CREATE DATA lr_wb TYPE REF TO ('IF_WB_OBJECT_DATA_MODEL'). ASSIGN lr_wb->* TO . ?= lo_profile. CALL METHOD lo_profile->('IF_WB_OBJECT_DATA_MODEL~SET_DATA') EXPORTING p_data = . CREATE OBJECT lo_persist TYPE ('CL_OA2P_OBJECT_PERSIST'). TRY. CALL METHOD lo_persist->('IF_WB_OBJECT_PERSIST~SAVE') EXPORTING p_object_data = . " Object Data CATCH cx_swb_exception. zcx_abapgit_exception=>raise( |Error deserialize profile { mv_profile }.| ). ENDTRY. tadir_insert( iv_package ). corr_insert( iv_package ). ENDMETHOD. METHOD zif_abapgit_object~exists. CALL METHOD ('CL_OA2P_OBJECT_PERSIST')=>('CHECK_EXISTS_ON_DB') EXPORTING i_profile = mv_profile RECEIVING r_exists = rv_bool. ENDMETHOD. METHOD zif_abapgit_object~get_comparator. 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. rv_active = is_active( ). ENDMETHOD. METHOD zif_abapgit_object~is_locked. DATA: lv_profile_name TYPE eqegraarg, lv_lock_number TYPE i, lt_locks TYPE STANDARD TABLE OF seqg3. lv_profile_name = mv_profile. CALL FUNCTION 'ENQUEUE_READ' EXPORTING gclient = sy-mandt " Client gname = 'OA2C_PROFILES' " Granularity name (-> table name) garg = lv_profile_name " Granularity value(->values of key fields) IMPORTING number = lv_lock_number TABLES enq = lt_locks. " Number of chosen lock entries rv_is_locked = boolc( lv_lock_number > 0 ). ENDMETHOD. METHOD zif_abapgit_object~jump. " Covered by ZCL_ABAPGIT_OBJECTS=>JUMP ENDMETHOD. METHOD zif_abapgit_object~serialize. DATA: lo_persist TYPE REF TO object, lo_profile TYPE REF TO object, lv_profile_key TYPE seu_objkey, lr_profile_data TYPE REF TO data, lr_wb TYPE REF TO data. FIELD-SYMBOLS: TYPE data, TYPE any, TYPE any. CREATE DATA lr_profile_data TYPE ('OA2C_SX_OA2P_OBJECT_DATA'). ASSIGN lr_profile_data->* TO . lv_profile_key = mv_profile. CREATE OBJECT lo_persist TYPE ('CL_OA2P_OBJECT_PERSIST'). CREATE OBJECT lo_profile TYPE ('CL_OA2P_OBJECT_DATA'). CREATE DATA lr_wb TYPE REF TO ('IF_WB_OBJECT_DATA_MODEL'). ASSIGN lr_wb->* TO . ?= lo_profile. TRY. CALL METHOD lo_persist->('IF_WB_OBJECT_PERSIST~GET') EXPORTING p_object_key = lv_profile_key " Object Key p_version = 'A' " Version (Active/Inactive) CHANGING p_object_data = . " Object Data CATCH cx_swb_object_does_not_exist. zcx_abapgit_exception=>raise( |OAuth2 Profile { lv_profile_key } doesn't exist.| ). CATCH cx_swb_exception. zcx_abapgit_exception=>raise( |Error when geting details of OAuth2 Profile { lv_profile_key }.| ). ENDTRY. "remove system specific information lo_profile = . CALL METHOD lo_profile->('IF_WB_OBJECT_DATA_MODEL~SET_CHANGED_BY') EXPORTING p_user_name = ''. CALL METHOD lo_profile->('IF_WB_OBJECT_DATA_MODEL~SET_CHANGED_ON') EXPORTING p_date = '00000000' p_time = '000000'. CALL METHOD lo_profile->('IF_WB_OBJECT_DATA_MODEL~SET_CREATED_BY') EXPORTING p_user_name = ''. CALL METHOD lo_profile->('IF_WB_OBJECT_DATA_MODEL~SET_CREATED_ON') EXPORTING p_date = '00000000' p_time = '000000'. CALL METHOD lo_profile->('IF_WB_OBJECT_DATA_MODEL~GET_DATA') IMPORTING p_data = . "remove runtime information ASSIGN COMPONENT 'O_SPECIFICS' OF STRUCTURE TO . CLEAR . io_xml->add( iv_name = 'PROFILE' ig_data = ). ENDMETHOD. ENDCLASS.