Exploit - Remove request from ADSO by Abap
- &---------------------------------------------------------------------*
- & Report ZDEL_REQ_ADSO
- &---------------------------------------------------------------------*
- &
- &---------------------------------------------------------------------*
REPORT
zdel_req_adso.
PARAMETERS: p_adsonm TYPE rsoadsonm.
PARAMETERS: p_nb_req TYPE i.
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.
DATA lt_request_xref TYPE rsdso_t_data_request_xref.
DATA v_line TYPE LINE OF rsdso_t_data_request_xref.
DATA v_nb_lignes TYPE i.
DATA v_start TYPE i.
"fill TLOGO structure
ls_tlogo-tlogo = 'ADSO'.
- ls_tlogo-tlogo = 'CUBE'.
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
lt_request_xref = lr_request_list->get_t_request_xref( ).
- On retire de la liste toutes les demandes qu'on ne veut pas
- supprimer
- combien de demandes y aa-t-il ?
- On trie en partant de la plus récente
SORT lt_request_xref BY src_pos DESCENDING.
READ TABLE lt_request_xref INTO v_line INDEX 1.
v_nb_lignes = v_line-src_pos.
- On va supprimer toutes les lignes qu'on veut pas supprimer
- donc on va partir de la ligne que le user a saisi +1
v_start = p_nb_req + 1.
- et on supprime toutes les lignes au-delà
DELETE lt_request_xref FROM v_start TO v_nb_lignes.
"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
TRY.
lr_task->start( ).
CATCH cx_rs_input_invalid INTO DATA(lr_failed).
ENDTRY.
IF lr_failed IS INITIAL.
"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(
DATA ls_msg TYPE rspc_s_msg.
MOVE-CORRESPONDING
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.
ELSE.
WRITE 'No Request was deleted.'.
ENDIF.