Abap CL_GUI_ALV_树链接点击节点

Abap CL_GUI_ALV_树链接点击节点,abap,dynpro,Abap,Dynpro,我想捕捉链接点击节点上的事件。我知道如何设置链接单击列项目,如下所示: 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_

我想捕捉链接点击节点上的事件。我知道如何设置链接单击列项目,如下所示:

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

但我不知道如何设置链接点击节点。你能帮我吗?谢谢。

我不明白,与所有其他事件处理实践相比,此事件处理案例有哪些困难/不同之处。但也许是我自己的错。所以,让我们一起逐步地做。观察和学习。:-)

事件接收器的定义如下所示:

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.
  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.
让我们来实现这个类

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.
最后,我们实例化处理程序类并注册处理程序,如下所示:

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.
  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树吗?它的事件处理机制有点简单(而且它是官方支持的,我总是考虑额外的奖励)。我最初使用了CL SaveStRead,但是我不能添加上下文菜单,所以我切换到CL GuiiiAlvyTead。我发现这一点:说节点文本应该按类型链接,但链接是一个结构。是的,但你也必须指定你想要的链接点击。如果我像你建议的那样做,那将一事无成。您可以在cl_gui_alv_树类的add_node方法的参数it_item_layout中指定它。但我只能在节点结构上启用链接单击,而不是节点本身。为什么还要在节点上设置链接单击?是否有特定的原因不通过单击节点来处理它?在cl_gui_alv_树中没有其他事件。有双击、链接单击和选择更改。而且选择的改变不适合我。那么,恐怕没有其他解决办法了。在节点上为其自身单击可扩展节点。您现在只剩下尝试和错误,如尝试左klick设计和左键单击运行。也许你也可以跟踪和调试,就像节点上的klick在内部所做的那样,从cl_gui_alv_树继承并重新定义适当的处理程序。我还想检查选择是否已更改,但右键单击打开上下文菜单时也会触发事件。。。一团乱。。。如果我能捕捉到上下文菜单的关闭,它会做的事情。。。