Aller au contenu

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  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.

ELSE.

WRITE 'No Request was deleted.'.

ENDIF.