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.

したがって、 が true に設定されている場合、両方の方法が機能item_selectionします。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
...

しかし、残念ながら、Control Frameworkが pool 内の item および node イベントを処理することは明言されていません (SAP の世界の他の多くのものと同様に暗示されています) 。
そのため、パラメータを無効にしてアイテム関連のイベントを登録するitem_selectionと、ノード関連のイベントも同様に機能しなくなります。
つまり、ノード関連のイベントに反応させたい場合は、アイテム関連のイベントを登録しないか、このパラメーターを「有効」に設定します。

于 2016-04-05T15:31:13.950 に答える