アイテムの選択を有効にせずに 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.
したがって、 が true に設定されている場合、両方の方法が機能item_selection
します。item_selection
が false に設定されている場合、どちらも機能していません。handle_node_ctmenu_request
ただし、この場合は解雇されると予想していました。