Я не могу понять, что должно быть сложно/различно в этом случае обработки событий по сравнению со всеми другими практиками обработки событий. Но, возможно, это моя вина. Итак, давайте сделаем это, шаг за шагом, вместе. Смотри и учись. :-)
Определение для приемника событий может выглядеть следующим образом:
CLASS lcl_tree_event_receiver DEFINITION.
PUBLIC SECTION.
.
.
.
METHODS handle_link_click
FOR EVENT link_click OF cl_gui_alv_tree
IMPORTING node_key
fieldname.
ENDCLASS.
Реализуем класс.
CLASS lcl_tree_event_receiver IMPLEMENTATION.
.
.
.
METHOD handle_link_click.
" Do whatever You want in here.
ENDMETHOD. "handle_link_click
ENDCLASS.
Активация дерево событий должен пройти соответствующий ID
DATA: lt_events TYPE cntl_simple_events,
l_event TYPE cntl_simple_event.
.
.
l_event-eventid = cl_gui_column_tree=>EVENTID_LINK_CLICK.
" yes, that works, in fact this constant is inside
" CL_ITEM_TREE_CONTROL
APPEND l_event TO lt_events.
CALL METHOD go_main_tree->set_registered_events
EXPORTING
events = lt_events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3.
И, наконец, мы создаем класс обработчика и зарегистрировать обработчик, которые могут выглядеть следующим образом:
DATA: l_tree_event_receiver TYPE REF TO lcl_tree_event_receiver.
CREATE OBJECT l_tree_event_receiver.
SET HANDLER l_tree_event_receiver->handle_link_click.
FOR go_main_tree.
Если вы хотите проверить, что работало для настройки событий, звоните
CALL METHOD go_main_tree->get_registered_events
IMPORTING
events = lt_events.
Есть ли шанс переключиться на дерево SALV? Его механизм обработки событий немного проще (и он официально поддерживается, что я всегда считаю дополнительным бонусом). – vwegert
Первоначально я использовал cl_salv_tree, но я не смог добавить контекстное меню, поэтому я переключился на cl_gui_alv_tree. Я нашел это: https://scn.sap.com/thread/160991, говоря, что текст узла должен быть по ссылке типа., Но ссылка - это структура. – miskohut