1

我在未启用项目选择的情况下使用 ALV 树时遇到问题。在这种情况下,我无法接收节点上下文菜单请求的事件。当我打开项目选择时,一切正常。我得到了节点和项目的上下文菜单请求的事件,但我不需要为我的应用程序启用项目选择。

这是我可以分享的一些代码:

DATA: g_tree TYPE REF TO cl_gui_alv_tree.
* create container for alv-tree
DATA: l_tree_container_name(30) TYPE c,
      l_custom_container        TYPE REF TO cl_gui_custom_container.

l_tree_container_name = 'TREE'.

CREATE OBJECT l_custom_container
 EXPORTING
  container_name              = l_tree_container_name.

* create tree control
CREATE OBJECT g_tree
 EXPORTING
  parent                      = l_custom_container
  node_selection_mode         = cl_gui_column_tree=>node_sel_mode_single
  item_selection              = abap_true "WOULD LIKE TO HAVE THIS SET TO FALSE
  no_html_header              = abap_true
  no_toolbar                  = ''.

在这里我注册事件:

DATA: lt_events TYPE cntl_simple_events,
      l_event   TYPE cntl_simple_event.

l_event-eventid = cl_gui_column_tree=>eventid_node_context_menu_req.
APPEND l_event TO lt_events.
l_event-eventid = cl_gui_column_tree=>eventid_item_context_menu_req.
APPEND l_event TO lt_events.

CALL METHOD g_tree->set_registered_events
  EXPORTING
    events                    = lt_events
  EXCEPTIONS
    cntl_error                = 1
    cntl_system_error         = 2
    illegal_event_combination = 3.

DATA: l_event_receiver TYPE REF TO tree_event_receiver.
CREATE OBJECT l_event_receiver.

 SET HANDLER l_event_receiver->handle_node_ctmenu_request FOR g_tree.
 SET HANDLER l_event_receiver->handle_node_ctmenu_selected FOR g_tree.
 SET HANDLER l_event_receiver->handle_item_ctmenu_request FOR g_tree.
 SET HANDLER l_event_receiver->handle_item_ctmenu_selected FOR g_tree.

这是我的处理程序:

METHOD handle_node_ctmenu_request.
  CALL METHOD menu->add_function
      EXPORTING
        fcode = 'DELETE_ITEM'
        text  = 'delete'.
ENDMETHOD.
METHOD handle_item_ctmenu_request.
CALL METHOD menu->add_function
      EXPORTING
        fcode = 'DELETE_ITEM'
        text  = 'delete'.
ENDMETHOD.

item_selection因此,当设置为 true时,这两种方法都有效。item_selection当设置为 false时,它​​们都不起作用。但是,我预计handle_node_ctmenu_request在这种情况下会被解雇。

4

1 回答 1

1

诀窍在于 ALV 树模型中不同类型事件的互连。
SAP Control Framework 官方文档指出:

如果您在创建实例时设置了参数 item_selection = 'X',您还可以对以下事件做出反应:
...
ITEM_CONTEXT_MENU_REQUEST
ITEM_CONTEXT_MENU_SELECT
...

但是,不幸的是,它没有说明(它暗示,就像 SAP 世界中的许多其他东西一样) Control Framework 处理pool 中的项目和节点事件。
因此,如果您使用 disableditem_selection参数注册与项目相关的事件,则与节点相关的事件将无法正常工作
也就是说,不注册item相关的事件,如果你想实现对你的节点相关事件的反应,或者将此参数设置为“Enabled”。

于 2016-04-05T15:31:13.950 回答