abap tree control

image
image


*&---------------------------------------------------------------------*
*& Report  ZHAIM_TREE_CONTROL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZPCYTREE.
* 功能码
DATA: OK_CODE TYPE SY-UCOMM,
      SAVE_OK TYPE SY-UCOMM.
* key text
DATA: NODEKEY(20) TYPE C,
      NODETXT(20) TYPE C.

* 定制控制对象
DATA: WA_CONTAINER TYPE SCRFNAME VALUE 'TREE',
* 客户对象
      WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
* 实例化对象
      WA_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.
* 节点信息表
DATA: IT_NODETABLE LIKE TABLE OF MTREESNODE,
      IW_NODETABLE TYPE MTREESNODE.

DATA  WA_SPFLI TYPE TABLE OF SPFLI.

*创建一个类,实现一个双击方法
CLASS LCL_APPLICATION DEFINITION DEFERRED.

*&---------------------------------------------------------------------*
*&       Class (DEFINITION)  LCL_APPLICATION
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION DEFINITION.
  PUBLIC SECTION.
    METHODS HANDLE_NODE_DOUBLE_CLICK
        FOR EVENT NODE_DOUBLE_CLICK
        OF CL_GUI_SIMPLE_TREE
        IMPORTING NODE_KEY.

ENDCLASS.               "LCL_APPLICATION
*&---------------------------------------------------------------------*
*&       Class (Implementation)  LCL_APPLICATION
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION IMPLEMENTATION.

  METHOD HANDLE_NODE_DOUBLE_CLICK.

    NODEKEY = NODE_KEY.

    READ TABLE IT_NODETABLE WITH KEY NODE_KEY = NODE_KEY INTO IW_NODETABLE.

    NODETXT = IW_NODETABLE-TEXT.
  ENDMETHOD.

ENDCLASS.               "LCL_APPLICATION

* 双击方法的类的实例化对象 准备在PBO中分配给TREE对象
DATA: G_APPLICATION TYPE REF TO LCL_APPLICATION.


START-OF-SELECTION.

  CREATE OBJECT G_APPLICATION.

  CALL SCREEN 9911.


*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9911 INPUT.

  SAVE_OK = OK_CODE.

  CLEAR OK_CODE.

  CASE SAVE_OK.
    WHEN 'BACK'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_9911 OUTPUT.
  SET PF-STATUS 'TREECTRL_GUIS'.
  SET TITLEBAR 'TREE CONTROL'.
IF WA_CUSTOM_CONTAINER IS INITIAL.
  PERFORM FRM_CREATE_TREE.
ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_TREE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_CREATE_TREE .
  DATA: EVENTS TYPE CNTL_SIMPLE_EVENTS,
        EVENT1 TYPE CNTL_SIMPLE_EVENT.
* 定制控制对象,指定tree control的容器
  CREATE OBJECT WA_CUSTOM_CONTAINER
   EXPORTING
*    PARENT                      =
    CONTAINER_NAME              = WA_CONTAINER " 定制对象名:TREE
*    STYLE                       =
*    LIFETIME                    = lifetime_default
*    REPID                       =
*    DYNNR                       =
*    NO_AUTODEF_PROGID_DYNNR     =
  EXCEPTIONS
    CNTL_ERROR                  = 1
    CNTL_SYSTEM_ERROR           = 2
    CREATE_ERROR                = 3
    LIFETIME_ERROR              = 4
    LIFETIME_DYNPRO_DYNPRO_LINK = 5
    others                      = 6
    .

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

* 定义树对象
  CREATE OBJECT WA_TREE
    EXPORTING
*      LIFETIME                    =
      PARENT                      = WA_CUSTOM_CONTAINER
*      SHELLSTYLE                  =
      NODE_SELECTION_MODE         = CL_GUI_SIMPLE_TREE=>NODE_SEL_MODE_SINGLE
*      HIDE_SELECTION              =
*      NAME                        =
    EXCEPTIONS
      LIFETIME_ERROR              = 1
      CNTL_SYSTEM_ERROR           = 2
      CREATE_ERROR                = 3
      FAILED                      = 4
      ILLEGAL_NODE_SELECTION_MODE = 5
      others                      = 6
      .
  IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

* 通过宏定义树 节点
DEFINE  CREATE_TREE.

  CLEAR IW_NODETABLE.

  IW_NODETABLE-NODE_KEY = &1.         "节点KEY值
  IW_NODETABLE-RELATKEY = &2.         "相关联的节点KEY值
  IW_NODETABLE-RELATSHIP = &3.        "关联关系
  IW_NODETABLE-HIDDEN = &4.
  IW_NODETABLE-DISABLED = &5.
  IW_NODETABLE-ISFOLDER = &6.         "文件夹形式
*  图标,可以运行程序 SHOWICON 查阅
  IW_NODETABLE-N_IMAGE = &7.          "图标
  IW_NODETABLE-EXP_IMAGE = &7.        "图标
*  IW_NODETABLE-EXPANDER.
  IW_NODETABLE-TEXT = &8.             "节点文本

  APPEND IW_NODETABLE TO IT_NODETABLE.

END-OF-DEFINITION.

CREATE_TREE 'CN'   ''       ''
                                '' '' 'X' '' '中国'.
CREATE_TREE 'gd' 'CN' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' 'X' '' '广东'.
CREATE_TREE 'guangzhou' 'gd' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '广州市'.
CREATE_TREE 'shenzhen' 'gd' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '深圳市'.

CREATE_TREE 'gz' 'CN' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' 'X' '' '广州'.
CREATE_TREE 'FENGTAI' 'gz' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '天河区'.
CREATE_TREE 'HAIDIAN' 'gz' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '南沙区'.
CREATE_TREE 'CHAOYANG' 'gz' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '海珠区'.
CREATE_TREE 'DONGCHENG' 'gz' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '黄埔区'.


* 为TREE对象添加节点
  CALL METHOD WA_TREE->ADD_NODES
    EXPORTING
      TABLE_STRUCTURE_NAME           = 'MTREESNODE'
      NODE_TABLE                     =  IT_NODETABLE
*    EXCEPTIONS
*      ERROR_IN_IT_NODETABLE          = 1
*      FAILED                         = 2
*      DP_ERROR                       = 3
*      TABLE_STRUCTURE_NAME_NOT_FOUND = 4
*      others                         = 5
          .
  IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*定义双击事件
  EVENT1-EVENTID = CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK.
  EVENT1-APPL_EVENT = 'X'.
  APPEND EVENT1 TO EVENTS.

* 添加事件内表
  CALL METHOD WA_TREE->SET_REGISTERED_EVENTS
    EXPORTING
      EVENTS                    = EVENTS
    EXCEPTIONS
      CNTL_ERROR                = 1
      CNTL_SYSTEM_ERROR         = 2
      ILLEGAL_EVENT_COMBINATION = 3
      others                    = 4
          .
  IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*  将已定义的双击事件分配到树对象
  SET HANDLER G_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR WA_TREE.
ENDFORM.                    " FRM_CREATE_TREE
posted @ 2026-07-29 17:25  虚拟过客之IT老男人  阅读(4)  评论(0)    收藏  举报