*&---------------------------------------------------------------------* *& Include ZABAPGIT_OBJECT_WDYN *&---------------------------------------------------------------------* *----------------------------------------------------------------------* * CLASS lcl_object_wdyn DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_object_wdyn DEFINITION INHERITING FROM lcl_objects_super FINAL. PUBLIC SECTION. INTERFACES lif_object. ALIASES mo_files FOR lif_object~mo_files. PRIVATE SECTION. DATA: mt_components TYPE TABLE OF wdy_ctlr_compo_vrs, mt_sources TYPE TABLE OF wdy_ctlr_compo_source_vrs. METHODS: get_limu_objects RETURNING VALUE(rt_objects) TYPE wdy_md_transport_keys, read RETURNING VALUE(rs_component) TYPE wdy_component_metadata RAISING lcx_exception, read_controller IMPORTING is_key TYPE wdy_md_controller_key RETURNING VALUE(rs_controller) TYPE wdy_md_controller_meta_data RAISING lcx_exception, read_definition IMPORTING is_key TYPE wdy_md_component_key RETURNING VALUE(rs_definition) TYPE wdy_md_component_meta_data RAISING lcx_exception, read_view IMPORTING is_key TYPE wdy_md_view_key RETURNING VALUE(rs_view) TYPE wdy_md_view_meta_data RAISING lcx_exception, recover_controller IMPORTING is_controller TYPE wdy_md_controller_meta_data RAISING lcx_exception, recover_definition IMPORTING is_definition TYPE wdy_md_component_meta_data iv_package TYPE devclass RAISING lcx_exception, recover_view IMPORTING is_view TYPE wdy_md_view_meta_data RAISING lcx_exception, delta_controller IMPORTING is_controller TYPE wdy_md_controller_meta_data RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object RAISING lcx_exception, delta_definition IMPORTING is_definition TYPE wdy_md_component_meta_data VALUE(iv_package) TYPE devclass RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object RAISING lcx_exception, delta_view IMPORTING is_view TYPE wdy_md_view_meta_data RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object RAISING lcx_exception, add_fm_param_exporting IMPORTING i_name TYPE string i_value TYPE any CHANGING ct_param TYPE abap_func_parmbind_tab, add_fm_param_tables IMPORTING i_name TYPE string CHANGING ct_value TYPE ANY TABLE ct_param TYPE abap_func_parmbind_tab, add_fm_exception IMPORTING i_name TYPE string i_value TYPE i CHANGING ct_exception TYPE abap_func_excpbind_tab. ENDCLASS. "lcl_object_wdyn DEFINITION *----------------------------------------------------------------------* * CLASS lcl_object_wdyn IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_object_wdyn 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. "lif_object~changed_by METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). ENDMETHOD. "lif_object~get_metadata METHOD lif_object~exists. DATA: lv_component_name TYPE wdy_component-component_name. SELECT SINGLE component_name FROM wdy_component INTO lv_component_name WHERE component_name = ms_item-obj_name AND version = 'A'. "#EC CI_GENBUFF rv_bool = boolc( sy-subrc = 0 ). ENDMETHOD. "lif_object~exists METHOD delta_definition. DATA: ls_key TYPE wdy_md_component_key, lv_found TYPE abap_bool, ls_obj_new TYPE svrs2_versionable_object, li_component TYPE REF TO if_wdy_md_component, ls_obj_old TYPE svrs2_versionable_object. ls_key-component_name = is_definition-definition-component_name. lv_found = cl_wdy_md_component=>check_existency( ls_key-component_name ). IF lv_found = abap_false. TRY. cl_wdy_md_component=>create_complete( EXPORTING name = ls_key-component_name IMPORTING component = li_component CHANGING devclass = iv_package ). li_component->save_to_database( ). li_component->unlock( ). CATCH cx_wdy_md_exception. lcx_exception=>raise( 'error creating dummy component' ). ENDTRY. ENDIF. ls_obj_new-objtype = wdyn_limu_component_definition. ls_obj_new-objname = ls_key-component_name. ls_obj_old-objtype = wdyn_limu_component_definition. ls_obj_old-objname = ls_key-component_name. APPEND is_definition-definition TO ls_obj_old-wdyd-defin. ls_obj_old-wdyd-descr = is_definition-descriptions. ls_obj_old-wdyd-cusag = is_definition-component_usages. ls_obj_old-wdyd-intrf = is_definition-interface_implementings. ls_obj_old-wdyd-libra = is_definition-library_usages. ls_obj_old-wdyd-ctuse = is_definition-ext_ctlr_usages. ls_obj_old-wdyd-ctmap = is_definition-ext_ctx_mappings. CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' EXPORTING obj_old = ls_obj_new obj_new = ls_obj_old CHANGING delta = rs_delta EXCEPTIONS inconsistent_objects = 1. IF sy-subrc <> 0. lcx_exception=>raise( 'error from SVRS_MAKE_OBJECT_DELTA' ). ENDIF. ENDMETHOD. "delta_definition METHOD delta_controller. DATA: li_controller TYPE REF TO if_wdy_md_controller, lv_found TYPE abap_bool, ls_key TYPE wdy_md_controller_key, ls_obj_new TYPE svrs2_versionable_object, ls_obj_old TYPE svrs2_versionable_object. FIELD-SYMBOLS: LIKE LINE OF mt_components, LIKE LINE OF mt_sources, TYPE ANY TABLE, TYPE ANY TABLE, TYPE ANY TABLE, TYPE ANY TABLE. ls_key-component_name = is_controller-definition-component_name. ls_key-controller_name = is_controller-definition-controller_name. lv_found = cl_wdy_md_controller=>check_existency( component_name = ls_key-component_name controller_name = ls_key-controller_name ). IF lv_found = abap_false. TRY. li_controller ?= cl_wdy_md_controller=>create_complete( component_name = ls_key-component_name controller_name = ls_key-controller_name controller_type = is_controller-definition-controller_type ). li_controller->save_to_database( ). li_controller->unlock( ). CATCH cx_wdy_md_exception. lcx_exception=>raise( 'error creating dummy controller' ). ENDTRY. ENDIF. ls_obj_new-objtype = wdyn_limu_component_controller. ls_obj_new-objname = ls_key. ls_obj_old-objtype = wdyn_limu_component_controller. ls_obj_old-objname = ls_key. APPEND is_controller-definition TO ls_obj_old-wdyc-defin. LOOP AT mt_components ASSIGNING WHERE component_name = ls_key-component_name AND controller_name = ls_key-controller_name. APPEND TO ls_obj_old-wdyc-ccomp. ENDLOOP. LOOP AT mt_sources ASSIGNING WHERE component_name = ls_key-component_name AND controller_name = ls_key-controller_name. APPEND TO ls_obj_old-wdyc-ccoms. ENDLOOP. ls_obj_old-wdyc-descr = is_controller-descriptions. ls_obj_old-wdyc-cusag = is_controller-controller_usages. ls_obj_old-wdyc-ccomt = is_controller-controller_component_texts. ls_obj_old-wdyc-cpara = is_controller-controller_parameters. ls_obj_old-wdyc-cpart = is_controller-controller_parameter_texts. ls_obj_old-wdyc-cnode = is_controller-context_nodes. ls_obj_old-wdyc-cattr = is_controller-context_attributes. ls_obj_old-wdyc-cmapp = is_controller-context_mappings. * Version 702 doesn't have these two attributes so we * use them dynamically for downward compatibility ASSIGN COMPONENT 'CONTROLLER_EXCEPTIONS' OF STRUCTURE is_controller TO . IF sy-subrc = 0. ASSIGN COMPONENT 'EXCP' OF STRUCTURE ls_obj_old-wdyc TO . IF sy-subrc = 0. = . ENDIF. ENDIF. ASSIGN COMPONENT 'CONTROLLER_EXCEPTIONS_TEXTS' OF STRUCTURE is_controller TO . IF sy-subrc = 0. ASSIGN COMPONENT 'EXCPT' OF STRUCTURE ls_obj_old-wdyc TO . IF sy-subrc = 0. = . ENDIF. ENDIF. ls_obj_old-wdyc-fgrps = is_controller-fieldgroups. CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' EXPORTING obj_old = ls_obj_new obj_new = ls_obj_old CHANGING delta = rs_delta EXCEPTIONS inconsistent_objects = 1. IF sy-subrc <> 0. lcx_exception=>raise( 'error from SVRS_MAKE_OBJECT_DELTA' ). ENDIF. ENDMETHOD. "delta_controller METHOD delta_view. DATA: ls_key TYPE wdy_md_view_key, ls_obj_new TYPE svrs2_versionable_object, ls_obj_old TYPE svrs2_versionable_object, lv_found TYPE abap_bool, li_view TYPE REF TO if_wdy_md_abstract_view. FIELD-SYMBOLS: LIKE LINE OF ls_obj_old-wdyv-defin. ls_key-component_name = is_view-definition-component_name. ls_key-view_name = is_view-definition-view_name. lv_found = cl_wdy_md_abstract_view=>check_existency( component_name = ls_key-component_name name = ls_key-view_name ). IF lv_found = abap_false. TRY. li_view = cl_wdy_md_abstract_view=>create( component_name = is_view-definition-component_name view_name = is_view-definition-view_name type = is_view-definition-type ). li_view->save_to_database( ). li_view->unlock( ). CATCH cx_wdy_md_exception. lcx_exception=>raise( 'error creating dummy view' ). ENDTRY. ENDIF. ls_obj_new-objtype = wdyn_limu_component_view. ls_obj_new-objname = ls_key. ls_obj_old-objtype = wdyn_limu_component_view. ls_obj_old-objname = ls_key. APPEND INITIAL LINE TO ls_obj_old-wdyv-defin ASSIGNING . MOVE-CORRESPONDING is_view-definition TO . ls_obj_old-wdyv-descr = is_view-descriptions. ls_obj_old-wdyv-vcont = is_view-view_containers. ls_obj_old-wdyv-vcntt = is_view-view_container_texts. ls_obj_old-wdyv-ibplg = is_view-iobound_plugs. ls_obj_old-wdyv-ibplt = is_view-iobound_plug_texts. ls_obj_old-wdyv-plpar = is_view-plug_parameters. ls_obj_old-wdyv-plprt = is_view-plug_parameter_texts. ls_obj_old-wdyv-uiele = is_view-ui_elements. ls_obj_old-wdyv-uicon = is_view-ui_context_bindings. ls_obj_old-wdyv-uievt = is_view-ui_event_bindings. ls_obj_old-wdyv-uiddc = is_view-ui_ddic_bindings. ls_obj_old-wdyv-uiprp = is_view-ui_properties. ls_obj_old-wdyv-navil = is_view-navigation_links. ls_obj_old-wdyv-navit = is_view-navigation_target_refs. ls_obj_old-wdyv-vshno = is_view-vsh_nodes. ls_obj_old-wdyv-vshpl = is_view-vsh_placeholders. ls_obj_old-wdyv-views = is_view-viewset_properties. CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' EXPORTING obj_old = ls_obj_new obj_new = ls_obj_old CHANGING delta = rs_delta EXCEPTIONS inconsistent_objects = 1. IF sy-subrc <> 0. lcx_exception=>raise( 'error from SVRS_MAKE_OBJECT_DELTA' ). ENDIF. ENDMETHOD. "delta_view METHOD recover_definition. DATA: ls_key TYPE wdy_md_component_key, lv_corrnr TYPE trkorr, ls_delta TYPE svrs2_xversionable_object. ls_delta = delta_definition( is_definition = is_definition iv_package = iv_package ). ls_key-component_name = is_definition-definition-component_name. cl_wdy_md_component=>recover_version( EXPORTING component_key = ls_key delta = ls_delta-wdyd CHANGING corrnr = lv_corrnr ). ENDMETHOD. "recover_definition METHOD recover_controller. DATA: ls_key TYPE wdy_controller_key, lv_corrnr TYPE trkorr, ls_delta TYPE svrs2_xversionable_object. ls_delta = delta_controller( is_controller ). ls_key-component_name = is_controller-definition-component_name. ls_key-controller_name = is_controller-definition-controller_name. cl_wdy_md_controller=>recover_version( EXPORTING controller_key = ls_key delta = ls_delta-wdyc CHANGING corrnr = lv_corrnr ). ENDMETHOD. "recover_controller METHOD recover_view. DATA: ls_key TYPE wdy_md_view_key, lv_corrnr TYPE trkorr, ls_delta TYPE svrs2_xversionable_object. ls_delta = delta_view( is_view ). ls_key-component_name = is_view-definition-component_name. ls_key-view_name = is_view-definition-view_name. cl_wdy_md_abstract_view=>recover_version( EXPORTING view_key = ls_key delta = ls_delta-wdyv CHANGING corrnr = lv_corrnr ). ENDMETHOD. "recover_view METHOD read_controller. DATA: lt_components TYPE TABLE OF wdy_ctlr_compo_vrs, lt_sources TYPE TABLE OF wdy_ctlr_compo_source_vrs, lt_definition TYPE TABLE OF wdy_controller, lt_psmodilog TYPE TABLE OF smodilog, lt_psmodisrc TYPE TABLE OF smodisrc, lt_fm_param TYPE abap_func_parmbind_tab, lt_fm_exception TYPE abap_func_excpbind_tab. FIELD-SYMBOLS: TYPE ANY TABLE, TYPE ANY TABLE. * Calling FM dynamically because version 702 has less parameters * FM parameters add_fm_param_exporting( EXPORTING i_name = 'CONTROLLER_KEY' i_value = is_key CHANGING ct_param = lt_fm_param ). add_fm_param_exporting( EXPORTING i_name = 'GET_ALL_TRANSLATIONS' i_value = abap_false CHANGING ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'DEFINITION' CHANGING ct_value = lt_definition ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'DESCRIPTIONS' CHANGING ct_value = rs_controller-descriptions ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_USAGES' CHANGING ct_value = rs_controller-controller_usages ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_COMPONENTS' CHANGING ct_value = lt_components ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_COMPONENT_SOURCES' CHANGING ct_value = lt_sources ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_COMPONENT_TEXTS' CHANGING ct_value = rs_controller-controller_component_texts ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_PARAMETERS' CHANGING ct_value = rs_controller-controller_parameters ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_PARAMETER_TEXTS' CHANGING ct_value = rs_controller-controller_parameter_texts ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'CONTEXT_NODES' CHANGING ct_value = rs_controller-context_nodes ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'CONTEXT_ATTRIBUTES' CHANGING ct_value = rs_controller-context_attributes ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'CONTEXT_MAPPINGS' CHANGING ct_value = rs_controller-context_mappings ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'FIELDGROUPS' CHANGING ct_value = rs_controller-fieldgroups ct_param = lt_fm_param ). * Version 702 doesn't have these two attributes so we * use them dynamically for downward compatibility ASSIGN COMPONENT 'CONTROLLER_EXCEPTIONS' OF STRUCTURE rs_controller TO . IF sy-subrc = 0. add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_EXCEPTIONS' CHANGING ct_value = ct_param = lt_fm_param ). ENDIF. ASSIGN COMPONENT 'CONTROLLER_EXCEPTION_TEXTS' OF STRUCTURE rs_controller TO . IF sy-subrc = 0. add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_EXCEPTION_TEXTS' CHANGING ct_value = ct_param = lt_fm_param ). ENDIF. add_fm_param_tables( EXPORTING i_name = 'PSMODILOG' CHANGING ct_value = lt_psmodilog ct_param = lt_fm_param ). add_fm_param_tables( EXPORTING i_name = 'PSMODISRC' CHANGING ct_value = lt_psmodisrc ct_param = lt_fm_param ). * FM exceptions add_fm_exception( EXPORTING i_name = 'NOT_EXISTING' i_value = 1 CHANGING ct_exception = lt_fm_exception ). add_fm_exception( EXPORTING i_name = 'OTHERS' i_value = 2 CHANGING ct_exception = lt_fm_exception ). CALL FUNCTION 'WDYC_GET_OBJECT' PARAMETER-TABLE lt_fm_param EXCEPTION-TABLE lt_fm_exception. IF sy-subrc <> 0. lcx_exception=>raise( 'error from WDYC_GET_OBJECT' ). ENDIF. APPEND LINES OF lt_components TO mt_components. APPEND LINES OF lt_sources TO mt_sources. READ TABLE lt_definition INDEX 1 INTO rs_controller-definition. IF sy-subrc <> 0. lcx_exception=>raise( 'WDYC, definition not found' ). ENDIF. CLEAR: rs_controller-definition-author, rs_controller-definition-createdon, rs_controller-definition-changedby, rs_controller-definition-changedon. ENDMETHOD. "read_controller METHOD read_definition. DATA: lt_definition TYPE TABLE OF wdy_component, lt_psmodilog TYPE TABLE OF smodilog, lt_psmodisrc TYPE TABLE OF smodisrc. CALL FUNCTION 'WDYD_GET_OBJECT' EXPORTING component_key = is_key get_all_translations = abap_false TABLES definition = lt_definition descriptions = rs_definition-descriptions component_usages = rs_definition-component_usages interface_implementings = rs_definition-interface_implementings library_usages = rs_definition-library_usages ext_ctlr_usages = rs_definition-ext_ctlr_usages ext_ctx_mappings = rs_definition-ext_ctx_mappings psmodilog = lt_psmodilog " not optional in all versions psmodisrc = lt_psmodisrc " not optional in all versions EXCEPTIONS not_existing = 1 OTHERS = 2. IF sy-subrc = 1. RETURN. ELSEIF sy-subrc <> 0. lcx_exception=>raise( 'error from WDYD_GET_OBJECT' ). ENDIF. READ TABLE lt_definition INDEX 1 INTO rs_definition-definition. IF sy-subrc <> 0. lcx_exception=>raise( 'WDYD, definition not found' ). ENDIF. CLEAR: rs_definition-definition-author, rs_definition-definition-createdon, rs_definition-definition-changedby, rs_definition-definition-changedon, rs_definition-definition-gendate, rs_definition-definition-gentime. ENDMETHOD. "read_definition METHOD read_view. DATA: lt_definition TYPE TABLE OF wdy_view_vrs, lt_psmodilog TYPE TABLE OF smodilog, lt_psmodisrc TYPE TABLE OF smodisrc. FIELD-SYMBOLS: LIKE LINE OF lt_definition. CALL FUNCTION 'WDYV_GET_OBJECT' EXPORTING view_key = is_key get_all_translations = abap_false TABLES definition = lt_definition descriptions = rs_view-descriptions view_containers = rs_view-view_containers view_container_texts = rs_view-view_container_texts iobound_plugs = rs_view-iobound_plugs iobound_plug_texts = rs_view-iobound_plug_texts plug_parameters = rs_view-plug_parameters plug_parameter_texts = rs_view-plug_parameter_texts ui_elements = rs_view-ui_elements ui_context_bindings = rs_view-ui_context_bindings ui_event_bindings = rs_view-ui_event_bindings ui_ddic_bindings = rs_view-ui_ddic_bindings ui_properties = rs_view-ui_properties navigation_links = rs_view-navigation_links navigation_target_refs = rs_view-navigation_target_refs vsh_nodes = rs_view-vsh_nodes vsh_placeholders = rs_view-vsh_placeholders viewset_properties = rs_view-viewset_properties psmodilog = lt_psmodilog psmodisrc = lt_psmodisrc EXCEPTIONS not_existing = 1 OTHERS = 2. IF sy-subrc <> 0. lcx_exception=>raise( 'error from WDYV_GET_OBJECT' ). ENDIF. READ TABLE lt_definition INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. MOVE-CORRESPONDING TO rs_view-definition. CLEAR: rs_view-definition-author, rs_view-definition-createdon, rs_view-definition-changedby, rs_view-definition-changedon. ENDMETHOD. "read_view METHOD get_limu_objects. DATA: lv_name TYPE wdy_component_name. lv_name = ms_item-obj_name. CALL FUNCTION 'WDYN_GET_LIMU_OBJECTS' EXPORTING component_name = lv_name IMPORTING limu_objects = rt_objects. ENDMETHOD. "get_limu_objects METHOD read. DATA: lt_objects TYPE wdy_md_transport_keys, ls_controller_key TYPE wdy_md_controller_key, ls_component_key TYPE wdy_md_component_key, ls_view_key TYPE wdy_md_view_key. FIELD-SYMBOLS: LIKE LINE OF lt_objects, LIKE LINE OF rs_component-ctlr_metadata, TYPE ANY TABLE, TYPE ANY TABLE. CLEAR mt_components. CLEAR mt_sources. lt_objects = get_limu_objects( ). LOOP AT lt_objects ASSIGNING . CASE -sub_type. WHEN wdyn_limu_component_controller. ls_controller_key = -sub_name. APPEND read_controller( ls_controller_key ) TO rs_component-ctlr_metadata. WHEN wdyn_limu_component_definition. ls_component_key = -sub_name. rs_component-comp_metadata = read_definition( ls_component_key ). WHEN wdyn_limu_component_view. ls_view_key = -sub_name. APPEND read_view( ls_view_key ) TO rs_component-view_metadata. WHEN OTHERS. ASSERT 0 = 1. ENDCASE. ENDLOOP. SORT rs_component-ctlr_metadata BY definition-component_name ASCENDING definition-controller_name ASCENDING. LOOP AT rs_component-ctlr_metadata ASSIGNING . SORT -descriptions. SORT -controller_usages. SORT -controller_components. SORT -controller_component_texts. SORT -controller_parameters. SORT -controller_parameter_texts. SORT -context_nodes. SORT -context_attributes. SORT -context_mappings. SORT -fieldgroups. * Version 702 doesn't have these two attributes so we * use them dynamically for downward compatibility ASSIGN COMPONENT 'CONTROLLER_EXCEPTIONS' OF STRUCTURE TO . IF sy-subrc = 0. SORT . ENDIF. ASSIGN COMPONENT 'CONTROLLER_EXCEPTION_TEXTS' OF STRUCTURE TO . IF sy-subrc = 0. SORT . ENDIF. ENDLOOP. SORT mt_components BY component_name ASCENDING controller_name ASCENDING cmpname ASCENDING. SORT mt_sources BY component_name ASCENDING controller_name ASCENDING cmpname ASCENDING line_number ASCENDING. ENDMETHOD. "read METHOD add_fm_param_exporting. DATA: ls_param LIKE LINE OF ct_param. ls_param-kind = abap_func_exporting. ls_param-name = i_name. GET REFERENCE OF i_value INTO ls_param-value. INSERT ls_param INTO TABLE ct_param. ENDMETHOD. "add_fm_param_exporting METHOD add_fm_param_tables. DATA: ls_param LIKE LINE OF ct_param. ls_param-kind = abap_func_tables. ls_param-name = i_name. GET REFERENCE OF ct_value INTO ls_param-value. INSERT ls_param INTO TABLE ct_param. ENDMETHOD. "add_fm_param_tables METHOD add_fm_exception. DATA: ls_exception LIKE LINE OF ct_exception. ls_exception-name = i_name. ls_exception-value = i_value. INSERT ls_exception INTO TABLE ct_exception. ENDMETHOD. "add_fm_exception METHOD lif_object~serialize. DATA: ls_component TYPE wdy_component_metadata. ls_component = read( ). io_xml->add( iv_name = 'COMPONENT' ig_data = ls_component ). io_xml->add( ig_data = mt_components iv_name = 'COMPONENTS' ). io_xml->add( ig_data = mt_sources iv_name = 'SOURCES' ). ENDMETHOD. "serialize METHOD lif_object~deserialize. DATA: ls_component TYPE wdy_component_metadata. FIELD-SYMBOLS: LIKE LINE OF ls_component-view_metadata, LIKE LINE OF ls_component-ctlr_metadata. io_xml->read( EXPORTING iv_name = 'COMPONENT' CHANGING cg_data = ls_component ). io_xml->read( EXPORTING iv_name = 'COMPONENTS' CHANGING cg_data = mt_components ). io_xml->read( EXPORTING iv_name = 'SOURCES' CHANGING cg_data = mt_sources ). * tadir_insert( iv_package ). ls_component-comp_metadata-definition-author = sy-uname. ls_component-comp_metadata-definition-createdon = sy-datum. recover_definition( is_definition = ls_component-comp_metadata iv_package = iv_package ). LOOP AT ls_component-ctlr_metadata ASSIGNING . -definition-author = sy-uname. -definition-createdon = sy-datum. recover_controller( ). ENDLOOP. LOOP AT ls_component-view_metadata ASSIGNING . -definition-author = sy-uname. -definition-createdon = sy-datum. recover_view( ). ENDLOOP. lcl_objects_activation=>add_item( ms_item ). ENDMETHOD. "deserialize METHOD lif_object~delete. DATA: lo_component TYPE REF TO cl_wdy_wb_component, lo_request TYPE REF TO cl_wb_request, li_state TYPE REF TO if_wb_program_state, lv_object_name TYPE seu_objkey. CREATE OBJECT lo_component. lv_object_name = ms_item-obj_name. CREATE OBJECT lo_request EXPORTING p_object_type = 'YC' p_object_name = lv_object_name p_operation = swbm_c_op_delete_no_dialog. lo_component->if_wb_program~process_wb_request( p_wb_request = lo_request p_wb_program_state = li_state ). 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 METHOD lif_object~compare_to_remote_version. CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. "lif_object~compare_to_remote_version ENDCLASS. "lcl_object_wdyn IMPLEMENTATION