Skip to Content

While working with SAP BWonHANA we came to the point to delete requests from an Advanced DSO using a program. Unfortunately there is no funtion module like RSSM_PROCESS_REQUDEL_ODSO for classic DSO.

So I spend some nice time with the ABAP Debugger and found a solution:

PARAMETERS: p_adsonm TYPE rsoadsonm.

DATA: ls_tlogo       TYPE rstran_s_tlogo,
      lt_tlogo_tabl  TYPE rsdso_t_data_tlogo_tabl,
      lr_task_param  TYPE REF TO cl_rsdso_data_task_param,
      lr_task_caller TYPE REF TO cl_rsdso_data_task_caller.

"fill TLOGO structure
ls_tlogo-tlogo = 'ADSO'.
ls_tlogo-objnm = p_adsonm.

"create instance of cl_rsdso_data_request_list
DATA(lr_request_list) = cl_rsdso_data_request_list=>create(
  i_s_tlogo   = ls_tlogo ).

"refresh list
lr_request_list->refresh( ).

"get list of all requests in XREF format
DATA(lt_request_xref) = lr_request_list->get_t_request_xref( ).

"do some stuff to determine relevant requests
...

...

"create another instance of cl_rsdso_data_request_list with XREF list
"why this?
"I cannot create lr_request_list with i_task_type = 'DELETE' and
"execute the method "refresh". But without i_task_type = 'DELETE'
"the method "start" of lr_task return with a dump...
"So, lets do this twice..
lr_request_list = cl_rsdso_data_request_list=>create(
  i_s_tlogo   = ls_tlogo
  i_task_type = 'DELETE'
  i_t_request_xref = lt_request_xref ).


"create task for deletion
DATA(lr_task) = cl_rsdso_data_task=>create(
  i_s_tlogo = ls_tlogo
  i_type = 'DELETE'
  i_t_tlogo_tabl = lt_tlogo_tabl
  i_r_request_list = lr_request_list
  i_r_param = lr_task_param
  i_r_caller = lr_task_caller ).

"start deletion
lr_task->start( ).

"get status
DATA(lv_status) = lr_task->get_status( ).
"get log
DATA(l_r_log)  = lr_task->get_r_log( ).

"write messages
LOOP AT l_r_log->get_t_msg( ) ASSIGNING FIELD-SYMBOL(<f_s_msg>).
  "WHERE msgty = 'X' OR msgty = 'A' OR msgty = 'E' OR msgty = 'W'.
  DATA ls_msg TYPE rspc_s_msg.

  MOVE-CORRESPONDING <f_s_msg> TO ls_msg.
  MESSAGE ID ls_msg-msgid TYPE ls_msg-msgty NUMBER ls_msg-msgno
  WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4.

ENDLOOP.

Maybe there is another way to get rid of the second instance ofย cl_rsdso_data_request_list. If you find a way, please tell me ๐Ÿ™‚

 

Please let me know if Iโ€™ve missed anything or something is incorrect.

Hope it helps!

Thanks ๐Ÿ™‚

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply