ALV TREE 的设计与实现,实例

ALV TREE 用作导航栏的实例

一、实现效果

二、相关类:CL_GUI_SIMPLE_TREE,  CL_GUI_CUSTOM_CONTAINER

三、实现步骤以及code

1.数据定义(TOP):

CLASS LCL_APPLICATION DEFINITION DEFERRED.
DATA: G_APPLICATION TYPE REF TO LCL_APPLICATION.
DATA: GT_NODE TYPE TABLE OF MTREESNODE.

DATA: G_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      G_TREE      TYPE REF TO CL_GUI_SIMPLE_TREE.

DATA: G_UCOMM TYPE SY-UCOMM.
DATA: OK_CODE TYPE SY-UCOMM.

2.实现类(CLS):

*----------------------------------------------------------------------*
*       CLASS lcl_application DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
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 DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_application IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION IMPLEMENTATION.
  METHOD  HANDLE_NODE_DOUBLE_CLICK.
    PERFORM FRM_NODE_DOUBLE_CLICK USING NODE_KEY.
  ENDMETHOD.                    "handle_node_double_click

ENDCLASS.           

3.屏幕初始化(output)

FORM FRM_INIT_100_TREE ." 初始化ALV TREE
  CHECK G_CONTAINER IS INITIAL .
  PERFORM FRM_CREATE_CONTAINER USING 'TREE' G_CONTAINER.
  CHECK SY-SUBRC = 0.
  PERFORM FRM_CREATE_TREE USING G_CONTAINER G_TREE.
  CHECK SY-SUBRC = 0.
  PERFORM FRM_TREE_SET_ALIGNMENT USING 15 G_TREE.
  PERFORM FRM_ADD_TREE_EVENT USING G_TREE G_APPLICATION.
  PERFORM FRM_ADD_NODE_TABLE TABLES GT_NODE.   " 设置节点数据;
  PERFORM FRM_ADD_TREE_NODES TABLES GT_NODE USING 'MTREESNODE' G_TREE.
ENDFORM.                    " FRM_INIT_100_TREE
*&----------

 4.有关form


FORM FRM_CREATE_CONTAINER
        USING PV_CON_TREE
              PV_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
  CREATE OBJECT PV_CONTAINER
    EXPORTING
      CONTAINER_NAME              = PV_CON_TREE   " 100屏幕CONTAINER控件
    EXCEPTIONS
      CNTL_ERROR                  = 1
      CNTL_SYSTEM_ERROR           = 2
      CREATE_ERROR                = 3
      LIFETIME_ERROR              = 4
      LIFETIME_DYNPRO_DYNPRO_LINK = 5.
ENDFORM.  


FORM FRM_CREATE_TREE
        USING    P_G_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER
                 P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.

  CREATE OBJECT P_G_TREE
    EXPORTING
*     lifetime                    =
      PARENT                      = P_G_CONTAINER
*     shellstyle                  =
      NODE_SELECTION_MODE         = P_G_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.

ENDFORM. 

FORM FRM_TREE_SET_ALIGNMENT  USING P_ALIGNMENT
                                   P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.
  CALL METHOD P_G_TREE->SET_ALIGNMENT
    EXPORTING
      ALIGNMENT = P_ALIGNMENT. """ 不能大于15;

ENDFORM.      


FORM FRM_ADD_TREE_EVENT
        USING P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE
              P_G_APPLICATION TYPE REF TO LCL_APPLICATION.
  DATA: LT_EVENTS TYPE CNTL_SIMPLE_EVENTS,
        LS_EVENT  TYPE CNTL_SIMPLE_EVENT.
  " node double click
  LS_EVENT-EVENTID = CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK.
  LS_EVENT-APPL_EVENT = 'X'. " process PAI if event occurs
  APPEND LS_EVENT TO LT_EVENTS.

  CALL METHOD P_G_TREE->SET_REGISTERED_EVENTS
    EXPORTING
      EVENTS                    = LT_EVENTS
    EXCEPTIONS
      CNTL_ERROR                = 1
      CNTL_SYSTEM_ERROR         = 2
      ILLEGAL_EVENT_COMBINATION = 3.

  CHECK SY-SUBRC = 0.
  CREATE OBJECT P_G_APPLICATION.
  SET HANDLER P_G_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR P_G_TREE.

ENDFORM. 


FORM FRM_ADD_NODE_TABLE TABLES P_GT_NODE STRUCTURE MTREESNODE.
  DATA: LS_NODE TYPE MTREESNODE.
  REFRESH P_GT_NODE.
  CLEAR LS_NODE.
  "第1层节点'
  LS_NODE-NODE_KEY = 'ROOT'.
  LS_NODE-RELATKEY = ''.
  LS_NODE-TEXT     = '项目管理职员分配'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.
  CLEAR LS_NODE.
  "第1层节点'
  LS_NODE-N_IMAGE  = ICON_HEADER.
  LS_NODE-NODE_KEY = 'ROOT_POJ'.
  LS_NODE-RELATKEY = 'ROOT'.
  LS_NODE-TEXT     = '项目管理'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.
  CLEAR LS_NODE.
  "第1层节点'
  LS_NODE-N_IMAGE  = ICON_CUSTOMER.
  LS_NODE-NODE_KEY = 'ROOT_ST'.
  LS_NODE-RELATKEY = 'ROOT'.
  LS_NODE-TEXT     = '职员管理'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.
  "第2层节点'
  LS_NODE-NODE_KEY = 'TREE1'.
  LS_NODE-RELATKEY = 'ROOT_POJ'.
  LS_NODE-TEXT     = '项目信息'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  LS_NODE-N_IMAGE  = ICON_INSERT_ROW.
  LS_NODE-NODE_KEY = 'INSERT'.
  LS_NODE-RELATKEY = 'ROOT_ST'.
  LS_NODE-TEXT     = '职员信息录入'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  LS_NODE-N_IMAGE  = ICON_CHANGE.
  LS_NODE-NODE_KEY = 'MODIY'.
  LS_NODE-RELATKEY = 'ROOT_ST'.
  LS_NODE-TEXT     = '职员信息修改'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  CLEAR: LS_NODE.
   LS_NODE-N_IMAGE  = ICON_agent.
  LS_NODE-NODE_KEY = 'APLI'.
  LS_NODE-RELATKEY = 'ROOT_ST'.
  LS_NODE-TEXT     = '审批'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  CLEAR: LS_NODE.
   LS_NODE-N_IMAGE  = ICON_agent.
  LS_NODE-NODE_KEY = 'A_ST'.
  LS_NODE-RELATKEY = 'APLI'.
  LS_NODE-TEXT     = '职员入职审批'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.
ENDFORM.                    " FRM_NODE_TABLE


FORM FRM_ADD_NODE_TABLE TABLES P_GT_NODE STRUCTURE MTREESNODE.
  DATA: LS_NODE TYPE MTREESNODE.
  REFRESH P_GT_NODE.
  CLEAR LS_NODE.
  "第1层节点'
  LS_NODE-NODE_KEY = 'ROOT'.
  LS_NODE-RELATKEY = ''.
  LS_NODE-TEXT     = '项目管理职员分配'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.
  CLEAR LS_NODE.
  "第1层节点'
  LS_NODE-N_IMAGE  = ICON_HEADER.
  LS_NODE-NODE_KEY = 'ROOT_POJ'.
  LS_NODE-RELATKEY = 'ROOT'.
  LS_NODE-TEXT     = '项目管理'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.
  CLEAR LS_NODE.
  "第1层节点'
  LS_NODE-N_IMAGE  = ICON_CUSTOMER.
  LS_NODE-NODE_KEY = 'ROOT_ST'.
  LS_NODE-RELATKEY = 'ROOT'.
  LS_NODE-TEXT     = '职员管理'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.
  "第2层节点'
  LS_NODE-NODE_KEY = 'TREE1'.
  LS_NODE-RELATKEY = 'ROOT_POJ'.
  LS_NODE-TEXT     = '项目信息'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  LS_NODE-N_IMAGE  = ICON_INSERT_ROW.
  LS_NODE-NODE_KEY = 'INSERT'.
  LS_NODE-RELATKEY = 'ROOT_ST'.
  LS_NODE-TEXT     = '职员信息录入'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  LS_NODE-N_IMAGE  = ICON_CHANGE.
  LS_NODE-NODE_KEY = 'MODIY'.
  LS_NODE-RELATKEY = 'ROOT_ST'.
  LS_NODE-TEXT     = '职员信息修改'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  CLEAR: LS_NODE.
   LS_NODE-N_IMAGE  = ICON_agent.
  LS_NODE-NODE_KEY = 'APLI'.
  LS_NODE-RELATKEY = 'ROOT_ST'.
  LS_NODE-TEXT     = '审批'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  CLEAR: LS_NODE.
   LS_NODE-N_IMAGE  = ICON_agent.
  LS_NODE-NODE_KEY = 'A_ST'.
  LS_NODE-RELATKEY = 'APLI'.
  LS_NODE-TEXT     = '职员入职审批'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.
ENDFORM.                    " FRM_NODE_TABLE






 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Gong JX

多谢鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值