*----------------------------------------------------------------------*
* CLASS LCL_TREE_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_TREE_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS HANDLE_NODE_DOUBLE_CLICK "节点双击事件
FOR EVENT NODE_DOUBLE_CLICK OF CL_GUI_ALV_TREE
IMPORTING NODE_KEY SENDER.
METHODS HANDLE_ITEM_DOUBLE_CLICK
FOR EVENT ITEM_DOUBLE_CLICK OF CL_GUI_ALV_TREE "项目双击事件
IMPORTING FIELDNAME NODE_KEY.
ENDCLASS. "lcl_tree_event_receiver DEFINITION
DATA: EVENT_RECEIVER TYPE REF TO LCL_TREE_EVENT_RECEIVER. " 事件定义
*----------------------------------------------------------------------*
* CLASS lcl_tree_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_TREE_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_NODE_DOUBLE_CLICK.
ENDMETHOD. "handle_node_double_click
METHOD HANDLE_ITEM_DOUBLE_CLICK.
DATA: L_VALUE TYPE LVC_VALUE,
L_LAYI TYPE LVC_T_LAYI,
L_LAYN TYPE LVC_S_LAYN .
IF P_R1 = 'X'.
CALL METHOD GV_TREE->GET_OUTTAB_LINE
EXPORTING
I_NODE_KEY = NODE_KEY
IMPORTING
E_OUTTAB_LINE = WA_PRO
E_NODE_TEXT = L_VALUE
ET_ITEM_LAYOUT = L_LAYI
ES_NODE_LAYOUT = L_LAYN
EXCEPTIONS
NODE_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC = 0.
IF WA_PRO-AUFNR IS NOT INITIAL.
SET PARAMETER ID 'ANR' FIELD WA_PRO-AUFNR.
CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
ELSEIF P_R2 = 'X'.
CALL METHOD GV_TREE->GET_OUTTAB_LINE
EXPORTING
I_NODE_KEY = NODE_KEY
IMPORTING
E_OUTTAB_LINE = WA_ALV
E_NODE_TEXT = L_VALUE
ET_ITEM_LAYOUT = L_LAYI
ES_NODE_LAYOUT = L_LAYN
EXCEPTIONS
NODE_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC = 0.
IF WA_ALV-VBELN IS NOT INITIAL.
SET PARAMETER ID 'AUN' FIELD WA_ALV-VBELN.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
ELSEIF P_R3 = 'X'.
CALL METHOD GV_TREE->GET_OUTTAB_LINE
EXPORTING
I_NODE_KEY = NODE_KEY
IMPORTING
E_OUTTAB_LINE = WA_ALV_K
E_NODE_TEXT = L_VALUE
ET_ITEM_LAYOUT = L_LAYI
ES_NODE_LAYOUT = L_LAYN
EXCEPTIONS
NODE_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC = 0.
IF WA_ALV_K-VBELN IS NOT INITIAL.
SET PARAMETER ID 'AUN' FIELD WA_ALV_K-VBELN.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD. "handle_item_double_click
ENDCLASS. "LCL_TREE_EVENT_RECEIVER IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form REGISTER_EVENTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM REGISTER_EVENTS .
DATA:
LT_EVENTS TYPE CNTL_SIMPLE_EVENTS,
L_EVENT TYPE CNTL_SIMPLE_EVENT,
L_EVENT_RECEIVER TYPE REF TO LCL_TREE_EVENT_RECEIVER.
CALL METHOD GV_TREE->GET_REGISTERED_EVENTS
IMPORTING
EVENTS = LT_EVENTS.
L_EVENT-EVENTID = CL_GUI_COLUMN_TREE=>EVENTID_NODE_DOUBLE_CLICK.
APPEND L_EVENT TO LT_EVENTS.
L_EVENT-EVENTID = CL_GUI_COLUMN_TREE=>EVENTID_ITEM_DOUBLE_CLICK.
APPEND L_EVENT TO LT_EVENTS.
CALL METHOD GV_TREE->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = LT_EVENTS
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
ILLEGAL_EVENT_COMBINATION = 3.
IF SY-SUBRC <> 0.
MESSAGE X208(00) WITH 'ERROR'.
ENDIF.
CREATE OBJECT L_EVENT_RECEIVER.
SET HANDLER L_EVENT_RECEIVER->HANDLE_NODE_DOUBLE_CLICK FOR GV_TREE.
SET HANDLER L_EVENT_RECEIVER->HANDLE_ITEM_DOUBLE_CLICK FOR GV_TREE.
ENDFORM. " REGISTER_EVENTS