Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

registering a object at runtime

former_member305388
Active Contributor
0 Kudos

Hi Experts,

In one of the standard code the I am trying to add an enhancement to add a note during the runtime. My enhancement is after the below standard code.

I can observe that the object is being deregistered during runtime which causes the code I am trying to implement not to work.

* set Data to pdo-object
    "prepare call
    lo_pdo_sc ?= mo_pdo.
 
 
    "call
    TRY.
        lo_pdo_sc->add_item( EXPORTING is_item   = ls_pdo_item
                                       iv_uname  = sy-uname
                                       iv_account_for_ess = iv_ess
                             IMPORTING es_return = ls_pdo_item_control
                             CHANGING  co_message_handler = mo_pdo_message_consumer ).
 
* Add internal note as longtext
        wd_main_node = mon_cll_set_facade->get_main_node( ).
        wd_child_node = wd_main_node->get_child_node( name = 'INTERNAL_NOTE' ).
        wd_child_node->get_attribute( EXPORTING name = 'INTERNAL_NOTE' IMPORTING value = lv_internal_note ).
 
        TRY.
            CALL METHOD lo_pdo_sc->/sapsrm/if_pdo_do_longtext~update_longtext
              EXPORTING
                iv_p_guid          = ls_pdo_item_control-guid
                iv_tdid            = 'NOTE'
                iv_tdspras         = sy-langu
                iv_tdformat        = 'X'
                iv_text_preview    = lv_internal_note
*              CHANGING
*                EV_CHANGED         = LV_CHANGED
*    CO_MESSAGE_HANDLER =
                .
 
          CATCH /sapsrm/cx_pdo_abort INTO lx_pdo_abort.
            mo_cll_message_handler->set_abort( io_pdo_abort_exception = lx_pdo_abort ).
        ENDTRY.
 
* update
        mo_pdo->submit_update( CHANGING co_message_handler = mo_pdo_message_consumer ).
 
* because view will be invalidated: clear the mapper reference from the bo_mapper
>>>>>>        mo_parent_bo_mapper->deregister_mapper( io_mapper = me ).
 
* refresh whole application because e.g. Total value of sc has maybe changed.
* updates were performed a step before
        mo_parent_bo_mapper->fire_event_refresh( iv_perform_updates = abap_false ).
 
* close window
        lo_window_controller = mo_wd_view_controller->get_embedding_window_ctlr( ).
        lo_window = lo_window_controller->get_window( ).
        lo_window->close( ).
        ev_close_window = abap_true.

The code I have implemented in the enhancement is given below, the buffer is updated but I guess due to the object not registered to BO mapper the updates are not visible in the webdynpro screen.

* get context-data
  io_mon_cll_set_facade->get_static_attributes( IMPORTING es_static_attributes = ls_cll_item ).

* Get longtext note
  wd_main_node = io_mon_cll_set_facade->get_main_node( ).
  wd_child_node = wd_main_node->get_child_node( name = 'NOTE' ).
  wd_child_node->get_attribute( EXPORTING name = 'NOTE' IMPORTING value = lv_note ).

  TRY.
      CALL METHOD io_pdo_sc->/sapsrm/if_pdo_do_longtext~update_longtext
        EXPORTING
          iv_p_guid          = is_pdo_item_control-guid
          iv_tdid            = 'HTXT'
          iv_tdspras         = sy-langu
          iv_tdformat        = 'X'
          iv_text_preview    = lv_note
*              CHANGING
*                EV_CHANGED         = LV_CHANGED
*    CO_MESSAGE_HANDLER =
          .
    CATCH /sapsrm/cx_pdo_abort INTO lx_pdo_abort.
      co_mo_cll_message_handler->set_abort( io_pdo_abort_exception = lx_pdo_abort ).
  ENDTRY.
* update
  io_pdo->submit_update( CHANGING co_message_handler = co_mo_pdo_message_consumer ).
ENDMETHOD.

Can someone tell me what is the correct way to get the updated data captured during runtime?

1 REPLY 1

former_member305388
Active Contributor
0 Kudos

During debug I found in the object io_pdo as mentioned inenhancement code and the standard object MO_PARENT_BO_MAPPER for the attribute MT_REGISTERED_MAPPER both are same except for an extra entry in the standard object MO_PARENT_BO_MAPPER. The entry is given below.

-> Hashed Table2x1(8) /SAPSRM/IF_CLL_DODM_SC_I_DESCR

Any idea as what needs to be done to add this entry in the enhancement? the standard code is in the class /SAPSRM/CL_CH_WD_DODM_SC_I_DSC