2015-07-09 7 views
0

Я хочу поймать события по ссылке, щелкнув по узлу. Я знаю, как установить ссылку, нажмите на пункт колонке, это как:CL_GUI_ALV_TREE Ссылка Нажмите на узел

DATA: ls_layout TYPE lvc_s_layi, 
     lt_layout TYPE lvc_t_layi. 

ls_layout-fieldname = 'Fieldname from table passing to alv tree'. 
ls_layout-class = cl_gui_column_tree=>item_class_link. 
APPEND ls_layout to lt_layout. 

o_cl_gui_tree->add_node(
    EXPORTING 
     "other parameters... 
     it_item_layout  = lt_layout 
     "other parameters... 
). 

Но я не знаю, как установить ссылку, нажмите на узел. Не могли бы вы помочь мне? Благодарю.

+0

Есть ли шанс переключиться на дерево SALV? Его механизм обработки событий немного проще (и он официально поддерживается, что я всегда считаю дополнительным бонусом). – vwegert

+0

Первоначально я использовал cl_salv_tree, но я не смог добавить контекстное меню, поэтому я переключился на cl_gui_alv_tree. Я нашел это: https://scn.sap.com/thread/160991, говоря, что текст узла должен быть по ссылке типа., Но ссылка - это структура. – miskohut

ответ

0

Я не могу понять, что должно быть сложно/различно в этом случае обработки событий по сравнению со всеми другими практиками обработки событий. Но, возможно, это моя вина. Итак, давайте сделаем это, шаг за шагом, вместе. Смотри и учись. :-)

Определение для приемника событий может выглядеть следующим образом:

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

да, но вы также должны указать, на что вы хотите нажать ссылку. Если я сделаю это так, как вы предлагаете, он ничего не сделает. Вы указываете его в параметре it_item_layout в методе add_node класса cl_gui_alv_tree. Но я смог активировать ссылку только на узел, а не на узел. – miskohut

+0

Почему вы даже хотите установить ссылку на узел? Есть ли конкретная причина для того, чтобы не обрабатывать его через щелчок узла? – icbytes

+0

Для этого нет другого события в cl_gui_alv_tree. Дважды щелкните мышью, нажмите ссылку и выбор. И выбор измененный меня не устраивает. – miskohut