abapGit/src/zabapgit_object_wdyn.prog.abap
larshp 8fb97bd661 FUGR ACID SPLO SSFO WDYN: fix popup
FUGR ACID SPLO SSFO WDYN:
fix package popups, it is now handled automagically
2017-02-18 14:20:04 +00:00

808 lines
29 KiB
ABAP

*&---------------------------------------------------------------------*
*& 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
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
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 ).
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: <ls_component> LIKE LINE OF mt_components,
<ls_source> LIKE LINE OF mt_sources,
<lt_ctrl_exceptions> TYPE ANY TABLE,
<lt_ctrl_exception_texts> TYPE ANY TABLE,
<excp> TYPE ANY TABLE,
<excpt> 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 <ls_component>
WHERE component_name = ls_key-component_name
AND controller_name = ls_key-controller_name.
APPEND <ls_component> TO ls_obj_old-wdyc-ccomp.
ENDLOOP.
LOOP AT mt_sources ASSIGNING <ls_source>
WHERE component_name = ls_key-component_name
AND controller_name = ls_key-controller_name.
APPEND <ls_source> 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 <lt_ctrl_exceptions>.
IF sy-subrc = 0.
ASSIGN COMPONENT 'EXCP' OF STRUCTURE ls_obj_old-wdyc TO <excp>.
IF sy-subrc = 0.
<excp> = <lt_ctrl_exceptions>.
ENDIF.
ENDIF.
ASSIGN COMPONENT 'CONTROLLER_EXCEPTIONS_TEXTS' OF STRUCTURE is_controller
TO <lt_ctrl_exception_texts>.
IF sy-subrc = 0.
ASSIGN COMPONENT 'EXCPT' OF STRUCTURE ls_obj_old-wdyc TO <excpt>.
IF sy-subrc = 0.
<excpt> = <lt_ctrl_exception_texts>.
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: <ls_def> 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 <ls_def>.
MOVE-CORRESPONDING is_view-definition TO <ls_def>.
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 ).
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: <lt_ctrl_exceptions> TYPE ANY TABLE,
<lt_ctrl_exception_texts> 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 <lt_ctrl_exceptions>.
IF sy-subrc = 0.
add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_EXCEPTIONS'
CHANGING ct_value = <lt_ctrl_exceptions>
ct_param = lt_fm_param ).
ENDIF.
ASSIGN COMPONENT 'CONTROLLER_EXCEPTION_TEXTS' OF STRUCTURE rs_controller TO <lt_ctrl_exception_texts>.
IF sy-subrc = 0.
add_fm_param_tables( EXPORTING i_name = 'CONTROLLER_EXCEPTION_TEXTS'
CHANGING ct_value = <lt_ctrl_exception_texts>
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: <ls_definition> 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 <ls_definition>.
ASSERT sy-subrc = 0.
MOVE-CORRESPONDING <ls_definition> 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: <ls_object> LIKE LINE OF lt_objects,
<ls_meta> LIKE LINE OF rs_component-ctlr_metadata,
<lt_ctrl_exceptions> TYPE ANY TABLE,
<lt_ctrl_exception_texts> TYPE ANY TABLE.
CLEAR mt_components.
CLEAR mt_sources.
lt_objects = get_limu_objects( ).
LOOP AT lt_objects ASSIGNING <ls_object>.
CASE <ls_object>-sub_type.
WHEN wdyn_limu_component_controller.
ls_controller_key = <ls_object>-sub_name.
APPEND read_controller( ls_controller_key ) TO rs_component-ctlr_metadata.
WHEN wdyn_limu_component_definition.
ls_component_key = <ls_object>-sub_name.
rs_component-comp_metadata = read_definition( ls_component_key ).
WHEN wdyn_limu_component_view.
ls_view_key = <ls_object>-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 <ls_meta>.
SORT <ls_meta>-descriptions.
SORT <ls_meta>-controller_usages.
SORT <ls_meta>-controller_components.
SORT <ls_meta>-controller_component_texts.
SORT <ls_meta>-controller_parameters.
SORT <ls_meta>-controller_parameter_texts.
SORT <ls_meta>-context_nodes.
SORT <ls_meta>-context_attributes.
SORT <ls_meta>-context_mappings.
SORT <ls_meta>-fieldgroups.
* Version 702 doesn't have these two attributes so we
* use them dynamically for downward compatibility
ASSIGN COMPONENT 'CONTROLLER_EXCEPTIONS' OF STRUCTURE <ls_meta> TO <lt_ctrl_exceptions>.
IF sy-subrc = 0.
SORT <lt_ctrl_exceptions>.
ENDIF.
ASSIGN COMPONENT 'CONTROLLER_EXCEPTION_TEXTS' OF STRUCTURE <ls_meta> TO <lt_ctrl_exception_texts>.
IF sy-subrc = 0.
SORT <lt_ctrl_exception_texts>.
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: <ls_view> LIKE LINE OF ls_component-view_metadata,
<ls_controller> 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( ls_component-comp_metadata ).
LOOP AT ls_component-ctlr_metadata ASSIGNING <ls_controller>.
<ls_controller>-definition-author = sy-uname.
<ls_controller>-definition-createdon = sy-datum.
recover_controller( <ls_controller> ).
ENDLOOP.
LOOP AT ls_component-view_metadata ASSIGNING <ls_view>.
<ls_view>-definition-author = sy-uname.
<ls_view>-definition-createdon = sy-datum.
recover_view( <ls_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_null_comparison_result.
ENDMETHOD. "lif_object~compare_to_remote_version
ENDCLASS. "lcl_object_wdyn IMPLEMENTATION