Technology Blog Posts by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
ppeters
Explorer
50,715
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 ?
21 Comments