SAP/ABAP ALV

(ABAP ALV) ALV SIMPLE TREE - TBU

haramang 2021. 10. 21. 16:32

ALV Simple Tree - 

 

1. Customer Container 2개 생성 -

   Tree 용 Data 용

 

2. Data용 Container는 기존에 생성하는 것과 동일하게 생성.

 

3. TREE 생성.

*   컨테이너 생성
    CREATE OBJECT GO_TREE_CONTAINER
      EXPORTING
        CONTAINER_NAME 'TREE_CONTAINER'.

*   TREE 컨트롤 생성, CLASS를 INSTANCE
    CREATE OBJECT GO_TREE
      EXPORTING
        PARENT = GO_TREE_CONTAINER

*      노드를 하나만 클릭할 수 있는가, 여러개 클릭할 수 있는가
        NODE_SELECTION_MODE CL_GUI_SIMPLE_TREE=>NODE_SEL_MODE_SINGLE.
*        NODE_SELECTION_MODE = CL_GUI_SIMPLE_TREE=>NODE_SEL_MODE_MULTIPLE.

 

3. 노드 추가
  DATA: gs_node LIKE mtreesnode,

          gt_node like table of gs_node.

  node-node_key 'ROOT' " Tree 상위
  node-isfolder 'X'.          " 폴더
  node-text     'CARRNAME'.
  APPEND gs_node TO gt_node. CLEAR gs_node.

  node-node_key 'CHILD1'. " Root 하위
  node-relatkey 'ROOT'.
  node-isfolder 'X'.
  node-text     'CARRID'.
  node-expander 'X'" 폴더 확장 여부
  APPEND gs_node TO gt_nodeCLEAR gs_node.

  LOOP AT gt_sflight INTO gs_sflight.
    node-node_key = gs_sflight-carrid.
    node-relatkey 'CHILD1'.
    node-n_image  = '원하는 아이콘 아무거나'
    node-isfolder ''.
    node-expander ''.
    node-text     gs_sflight-carrname.
    APPEND gs_node TO gt_node.

   CLEAR gs_node, gs_sflight.
    
  ENDLOOP.

 

 

*   트리 노드 추가
    CALL METHOD G_TREE->ADD_NODES
      EXPORTING
        TABLE_STRUCTURE_NAME 'MTREESNODE'
        NODE_TABLE           gt_node[].

 

 

 

3. 이벤트추가

   DATA: LT_EVENTS     TYPE CNTL_SIMPLE_EVENTS, " 더블클릭 이벤트
           LS_EVENT      TYPE CNTL_SIMPLE_EVENT.

 

 

*   이벤트 등록
    CREATE OBJECT LO_EVENT_HANDLER.

    LS_EVENT-EVENTID CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK.
    LS_EVENT-APPL_EVENT 'X'.
    APPEND LS_EVENT TO LT_EVENTS.

 


*   트리 이벤트 등록
    CALL METHOD GO_TREE->SET_REGISTERED_EVENTS
      EXPORTING
        EVENTS   = LT_EVENTS[]
      EXCEPTIONS
        CNTL_ERROR                        1
        CNTL_SYSTEM_ERROR             2
        ILLEGAL_EVENT_COMBINATION 3.

*    이벤트 핸들러
    SET HANDLER LO_EVENT_HANDLER->NODE_DOUBLE_CLICK.