ALV TREE 的設計與實現

ALV TREE 用作導航欄的實例

相關類:CL_GUI_SIMPLE_TREE,  CL_GUI_CUSTOM_CONTAINER

數據定義(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.

實現類(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.           

屏幕初始化(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
*&----------

 有關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






 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章