Сижу ковыряюсь. Конструкция типа такой, работает замечательно:
Code:
DATA: l_msg_handler TYPE REF TO cl_message_handler_mm.
CALL METHOD cl_message_handler_mm=>get_handler
IMPORTING
ex_handler = l_msg_handler.
CALL METHOD l_msg_handler->remove_all( ).
CALL METHOD l_msg_handler->cleanup( ).
Ну понятно, что она удаляет все сообщения. Теперь хочу сделать выборочное удаление. Пишу:
Code:
DATA: l_msg_handler TYPE REF TO cl_message_handler_mm,
l_event TYPE REF TO cl_event_mm,
lt_event_list TYPE mmpur_event_list,
wa_lt_event_list TYPE MMPUR_EVENT_ENTRY.
CALL METHOD cl_message_handler_mm=>get_handler
IMPORTING
ex_handler = l_msg_handler.
" получаю список сообщений
CALL METHOD l_msg_handler->getlist
IMPORTING
ex_events = lt_event_list[].
loop at lt_event_list into wa_lt_event_list.
" проверяю на мою сигнатуру
if wa_lt_event_list-signature = 'ZME20610'.
" удаляю
CALL METHOD l_msg_handler->REMOVE
exporting
im_event_obj = wa_lt_event_list-event_obj.
endif.
endloop.
Выпадает в дамп в методе REMOVE на строке INSERT. Как я понял,пытается сохранить сообщение перед удаленнием.
Code:
DATA: l_event LIKE LINE OF events.
LOOP AT events INTO l_event WHERE event_obj = im_event_obj.
IF configuration-keep_deleted_events EQ mmpur_yes.
INSERT l_event INTO deleted_events[].
ENDIF.
DELETE events.
ENDLOOP.
DELETE current_events WHERE event_obj = im_event_obj.
Дамп следующего содержания:
You attempted to change, delete or create a line in the
internal table "{O:27*\CLASS=CL_MESSAGE_HANDLER_MM}\DATA=???", but no valid cursor exists for the table.
Possible reasons:
1. The relevent ABAP/4 statement does not include the addition
"...INDEX...", although the statement is not
inside a "LOOP...ENDLOOP" loop processing this table.
2. The relevent ABAP/4 statement was called from within a
"LOOP...ENDLOOP" loop after a DELETE
"{O:27*\CLASS=CL_MESSAGE_HANDLER_MM}\DATA=???".
.