Tree ALV的双击实现完整版

*Class defination
*----------------------------------------------------------------------*
*       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(00WITH '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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值