*&---------------------------------------------------------------------* *& Include ZABAPGIT_OBJECT_WDYA *&---------------------------------------------------------------------* *----------------------------------------------------------------------* * CLASS lcl_object_wdya DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_object_wdya DEFINITION INHERITING FROM lcl_objects_super FINAL. PUBLIC SECTION. INTERFACES lif_object. ALIASES mo_files FOR lif_object~mo_files. PRIVATE SECTION. METHODS read EXPORTING es_app TYPE wdy_application et_properties TYPE wdy_app_property_table RAISING lcx_exception. METHODS save IMPORTING is_app TYPE wdy_application it_properties TYPE wdy_app_property_table iv_package TYPE devclass RAISING lcx_exception. ENDCLASS. "lcl_object_wdya DEFINITION *----------------------------------------------------------------------* * CLASS lcl_object_wdya IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_object_wdya IMPLEMENTATION. METHOD lif_object~has_changed_since. rv_changed = abap_true. ENDMETHOD. "lif_object~has_changed_since METHOD lif_object~changed_by. rv_user = c_user_unknown. " todo ENDMETHOD. METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). ENDMETHOD. "lif_object~get_metadata METHOD lif_object~exists. DATA: lv_name TYPE wdy_application_name. lv_name = ms_item-obj_name. TRY. cl_wdy_md_application=>get_object_by_key( name = lv_name version = 'A' ). rv_bool = abap_true. CATCH cx_wdy_md_not_existing. rv_bool = abap_false. CATCH cx_wdy_md_permission_failure. lcx_exception=>raise( 'WDYA, permission failure' ). ENDTRY. ENDMETHOD. "lif_object~exists METHOD read. DATA: li_app TYPE REF TO if_wdy_md_application, li_map TYPE REF TO if_object_map, lo_prop TYPE REF TO cl_wdy_md_application_property, ls_prop LIKE LINE OF et_properties, lv_name TYPE wdy_application_name. CLEAR es_app. CLEAR et_properties. lv_name = ms_item-obj_name. TRY. li_app = cl_wdy_md_application=>get_object_by_key( name = lv_name version = 'A' ). CATCH cx_wdy_md_not_existing. RETURN. CATCH cx_wdy_md_permission_failure. lcx_exception=>raise( 'WDYA, permission failure' ). ENDTRY. li_app->if_wdy_md_object~get_definition( IMPORTING definition = es_app ). CLEAR: es_app-author, es_app-createdon, es_app-changedby, es_app-changedon. li_map = li_app->get_properties( ). DO li_map->size( ) TIMES. lo_prop ?= li_map->get_by_position( sy-index ). lo_prop->get_definition( IMPORTING definition = ls_prop ). APPEND ls_prop TO et_properties. ENDDO. ENDMETHOD. "read METHOD lif_object~serialize. DATA: ls_app TYPE wdy_application, lt_properties TYPE wdy_app_property_table. read( IMPORTING es_app = ls_app et_properties = lt_properties ). io_xml->add( iv_name = 'APP' ig_data = ls_app ). io_xml->add( iv_name = 'PROPERTIES' ig_data = lt_properties ). ENDMETHOD. "serialize METHOD save. DATA: li_prop TYPE REF TO if_wdy_md_application_property, lo_app TYPE REF TO cl_wdy_md_application. FIELD-SYMBOLS: LIKE LINE OF it_properties. TRY. CREATE OBJECT lo_app EXPORTING name = is_app-application_name definition = is_app devclass = iv_package. LOOP AT it_properties ASSIGNING . li_prop = lo_app->if_wdy_md_application~create_property( -name ). li_prop->set_value( -value ). ENDLOOP. lo_app->if_wdy_md_lockable_object~save_to_database( ). CATCH cx_wdy_md_exception. lcx_exception=>raise( 'error saving WDYA' ). ENDTRY. ENDMETHOD. "save METHOD lif_object~deserialize. DATA: ls_app TYPE wdy_application, lt_properties TYPE wdy_app_property_table. io_xml->read( EXPORTING iv_name = 'APP' CHANGING cg_data = ls_app ). io_xml->read( EXPORTING iv_name = 'PROPERTIES' CHANGING cg_data = lt_properties ). save( is_app = ls_app it_properties = lt_properties iv_package = iv_package ). ENDMETHOD. "deserialize METHOD lif_object~delete. DATA: li_app TYPE REF TO if_wdy_md_application, lv_objkey TYPE wdy_wb_appl_name, lv_type TYPE seu_type, lv_name TYPE wdy_application_name. lv_name = ms_item-obj_name. TRY. li_app = cl_wdy_md_application=>get_object_by_key( name = lv_name version = 'A' ). li_app->if_wdy_md_object~delete( ). li_app->if_wdy_md_lockable_object~save_to_database( ). * method save_to_database calls function module TR_TADIR_INTERFACE * with test mode = X, so it does not delete the TADIR entry. * Instead the standard code uses RS_TREE_OBJECT_PLACEMENT to delete * the TADIR entry lv_objkey = ms_item-obj_name. CONCATENATE 'O' swbm_c_type_wdy_application INTO lv_type. CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT' EXPORTING object = lv_objkey type = lv_type operation = 'DELETE'. CATCH cx_wdy_md_not_existing. RETURN. CATCH cx_wdy_md_exception. lcx_exception=>raise( 'WDYA, error deleting' ). ENDTRY. ENDMETHOD. "delete METHOD lif_object~jump. CALL FUNCTION 'RS_TOOL_ACCESS' EXPORTING operation = 'SHOW' object_name = ms_item-obj_name object_type = ms_item-obj_type in_new_window = abap_true. ENDMETHOD. "jump ENDCLASS. "lcl_object_wdya IMPLEMENTATION