본문 바로가기
ABAP/개발Tip

[개발Tip] CL_GUI_LIST_TREE 사용 방법

by name_text 2023. 10. 16.

CL_GUI_LIST_TREE

LIST_TREE는 노드의 데이터를 헤더/리스트 2개의 컬럼으로 트리를 표현합니다.

노드의 컬럼을 표현한다는 부분에서는 Column tree와 비슷하여 전반적인 사용 방법은 Column tree와 유사하지만 List tree의 경우 각각의 노드별로 Hierarchy 설정할 아이템(컬럼)을 지정할 수 있어 리스트로 데이터를 표현하기에 좀더 유연합니다.

 > Column tree는 Tree Object에 Hierarchy 컬럼을 지정하여 모든 노드는 동일한 컬럼으로만 계층구조 표현

 > List tree는 각 노드별로 Hierarchy 컬럼을 지정하여 개별 노드별로 계층구조의 표현을 다르게 가능

                  Hierarchy 이외의 컬럼은 List 컬럼에 단일 컬럼으로 합쳐져서 표현됨

 

#1. 노드 데이터

자주 사용하는 필드에 대한 설명

1) 노드

필드명 설명
NODE_KEY 노드의 키값으로 중복 금지  
RELATKEY 상위 노드의 키값  
HIDDEN 숨김 여부 'X' : 숨김, ' ' : 표시
DISABLED 트리 이벤트 비활성화 여부 'X' : 이벤트 비활성화, ' ' : 활성화
ISFOLDER 폴더 여부 'X' : 폴더, ' ' : Leaf
N_IMAGE 기본 이미지(아이콘) ICONNAME 형식
EXP_IMAGE 폴더가 펼쳐졌을때 이미지(아이콘) ICONNAME 형식
STYLE 노드의 텍스트 스타일 CL_TREE_CONTROL_BASE=>STYLE_DEFAULT              "Normal
CL_TREE_CONTROL_BASE=>STYLE_INACTIVE             "Grey
CL_TREE_CONTROL_BASE=>STYLE_INTENSIFD_CRITICAL   "Red
CL_TREE_CONTROL_BASE=>STYLE_INTENSIFIED          "Blue
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED           "Yellow background
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_NEGATIVE  "Red background
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_POSITIVE  "Green background
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_A         "Blue background
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_B         "Grey background
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_C         "Orange background
LAST_HITEM HIERARCHY 필드 어느 컬럼까지 HIERARCHY 로 표현할 것인지 필드명 입력

2) 아이템(노드의 컬럼)

필드명 설명
NODE_KEY 노드의 키값  
ITEM_NAME 컬럼명 LIST TREE에서는 숫자로만 사용
CLASS 컬럼 유형 CL_GUI_COLUMN_TREE=>ITEM_CLASS_TEXT
CL_GUI_COLUMN_TREE=>ITEM_CLASS_CHECKBOX
CL_GUI_COLUMN_TREE=>ITEM_CLASS_BUTTON
CL_GUI_COLUMN_TREE=>ITEM_CLASS_LINK
T_IMAGE 아이콘 ICONNAME 형식
STYLE 컬럼의 텍스트 스타일 CL_TREE_CONTROL_BASE=>STYLE_DEFAULT              "Normal
CL_TREE_CONTROL_BASE=>STYLE_INACTIVE             "Grey
CL_TREE_CONTROL_BASE=>STYLE_INTENSIFD_CRITICAL   "Red
CL_TREE_CONTROL_BASE=>STYLE_INTENSIFIED          "Blue
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED           "Yellow background
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_NEGATIVE  "Red background
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_POSITIVE  "Green background
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_A         "Blue background
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_B         "Grey background
CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_C         "Orange background
LENGTH 표시 길이 LIST TREE에서만 사용
TEXT 텍스트  

 

#2. 이벤트

 -. Double Click, Drag 등 여러 이벤트가 지원되며 NODE_DOUBLE_CLICK은 거의 필수로 사용한다

 -. 트리의 Set_registered_events 메소드를 통해 이벤트를 등록해야 이벤드 핸들러 호출이 가능하며,

    이벤트 등록(set_registered_events)시 APPL_EVENT =  'X' 지정하면 GUI_STATUS 이벤트처럼 PBO/PAI가 호출된다

DATA LT_EVENTS TYPE CNTL_SIMPLE_EVENTS.
LT_EVENTS = VALUE #( ( EVENTID = CL_GUI_LIST_TREE=>EVENTID_NODE_DOUBLE_CLICK  APPL_EVENT = ' ' ) ). "APPL_EVENT : X = 애플리케이션 이벤트가 되므로 PBO 및 PAI가 호출됨
IF GV_ITEM_SELECTION IS NOT INITIAL.
  APPEND VALUE #( EVENTID = CL_GUI_LIST_TREE=>EVENTID_ITEM_DOUBLE_CLICK  APPL_EVENT = ' ' ) TO LT_EVENTS.
ENDIF.

 

#3. 소스코드 예시

관리회계의 각종 그룹(코스트센터 등)을 트리로 보여주는 리포트

P_CLASS로 표시할 그룹 선택 

  > 0101 : 코스트센터 그룹

  > 0102 : 원가요소 그룹

  > 0106 : 손익센터 그룹

REPORT YSAND_BOX_003.

* 트리관련 전역 변수
  DATA GO_GUI_LIST_TREE TYPE REF TO CL_GUI_LIST_TREE.
  DATA: GT_NODES TYPE TREEV_NTAB,   "트리에 표시할 노드
        GT_ITEMS TYPE STANDARD TABLE OF MTREEITM,     "트리 노드의 컬럼
        GS_HIERARCHY_HEADER      TYPE TREEV_HHDR,     "트리의 Hierarchy 헤더
        GS_LIST_HEADER           TYPE TREEV_LHDR,     "트리의 List 헤더(CL_GUI_LIST_TREE에서 사용)
        GV_ITEM_SELECTION        TYPE C.              "트리의 아이템(노드의 컬럼) 선택 가능 여부

* Selection Screen
  PARAMETERS: P_KOKRS TYPE TKA01-KOKRS OBLIGATORY MEMORY ID CAC,
              P_CLASS TYPE SETHEADER-SETCLASS OBLIGATORY DEFAULT '0101'.
  SELECTION-SCREEN SKIP 1.
  PARAMETERS P_ITM_SE AS CHECKBOX.      "아이템 선택 가능 여부

* 트리 이벤트
  CLASS LCL_TREE_EVENT_RECEIVER DEFINITION.
    PUBLIC SECTION.
      METHODS: HANDLE_NODE_DOUBLE_CLICK FOR EVENT NODE_DOUBLE_CLICK OF CL_GUI_LIST_TREE IMPORTING NODE_KEY,
               HANDLE_ITEM_DOUBLE_CLICK FOR EVENT ITEM_DOUBLE_CLICK OF CL_GUI_LIST_TREE IMPORTING NODE_KEY" TYPE  TV_NODEKEY
                                                                                                    ITEM_NAME." Type  TV_ITMNAME
  ENDCLASS.

  CLASS LCL_TREE_EVENT_RECEIVER IMPLEMENTATION.
    METHOD HANDLE_NODE_DOUBLE_CLICK.
      IF GT_NODES[ NODE_KEY = NODE_KEY ]-ISFOLDER EQ 'X'. "현재 노드가 폴더면 펼치기
        GO_GUI_LIST_TREE->EXPAND_NODE(
          EXPORTING
            NODE_KEY            = NODE_KEY
*            LEVEL_COUNT         =
*            EXPAND_SUBTREE      =
          EXCEPTIONS
            FAILED              = 1
            ILLEGAL_LEVEL_COUNT = 2
            CNTL_SYSTEM_ERROR   = 3
            NODE_NOT_FOUND      = 4
            CANNOT_EXPAND_LEAF  = 5
            others              = 6
               ).
        IF SY-SUBRC <> 0.
*         Implement suitable error handling here
        ENDIF.

      ELSE.
        MESSAGE I000(0K) WITH NODE_KEY.
      ENDIF.

    ENDMETHOD.
    METHOD HANDLE_ITEM_DOUBLE_CLICK.
      MESSAGE I000(0K) WITH NODE_KEY ITEM_NAME.
    ENDMETHOD.
  ENDCLASS.

START-OF-SELECTION.

  SELECT SINGLE
    *
  FROM TKA01
  WHERE KOKRS EQ @P_KOKRS
  INTO @DATA(LS_TKA01).
  IF SY-SUBRC NE 0.
    EXIT.
  ENDIF.
  DATA(LV_KHINR) = SWITCH #( P_CLASS WHEN '0101' THEN LS_TKA01-KHINR    "코스트센터 그룹
                                     WHEN '0106' THEN LS_TKA01-PHINR    "손익센터 그룹
                                     WHEN '0102' THEN 'K8000'           "원가요소그룹
                                     ).
  DATA(LV_SUBCLASS) = SWITCH #( P_CLASS WHEN '0102' THEN LS_TKA01-KTOPL
                                        ELSE P_KOKRS ).

  CHECK LV_KHINR IS NOT INITIAL.

  "트리에 표시할 노드 데이터
  CLEAR: GT_NODES, GT_ITEMS, GS_HIERARCHY_HEADER.
  PERFORM SET_NODES USING P_KOKRS
                          P_CLASS
                          LV_SUBCLASS
                          LV_KHINR.

  "트리가 포함된 스크린 호출
  SKIP.   "Parent를 CL_GUI_CONTAINER=>SCREEN0 를 사용하기 위해 공백 삽입
  PERFORM CREATE_SIMPLE_TREE.

*&---------------------------------------------------------------------*
*&      Form  SET_NODES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0050   text
*----------------------------------------------------------------------*
FORM SET_NODES  USING   P_KOKRS
                        P_SETCLASS
                        P_SUBCLASS
                        P_SETNAME.
  DATA(LS_MASTER_DATA) = VALUE GRPHP1( MDCHECK  = 'X'
                                       BREAKINT = 'X'
                                       SHOWTXT  = 'X' ).
  DATA: LT_NODES        TYPE GSETH_NODE_TAB,
        LT_VALUES_STD   TYPE GSETH_VAL_TAB,
        LT_MASTER_STD   TYPE GSETH_MD_TAB,
        LT_VALUES       TYPE SORTED TABLE OF GSETH_VAL_LINE WITH NON-UNIQUE KEY SETID,
        LT_MASTER_DATA  TYPE SORTED TABLE OF GSETH_MD_LINE WITH NON-UNIQUE KEY NAME,
        LS_INFO         TYPE GRPHINFO,
        LV_OVERWRITE    TYPE SY-DATAR VALUE 'X',
        LV_SETID        TYPE SETHIER-SETID,
        LV_RELATKEY     TYPE TV_NODEKEY,
        LV_TABIX        TYPE SY-TABIX.
  RANGES LR_LEAF FOR SETLEAF-VALFROM.

  LV_SETID = |{ P_SETCLASS }{ P_SUBCLASS }{ P_SETNAME }|.

  CALL FUNCTION 'K_HIERARCHY_TABLES_READ'
    EXPORTING
      E_CLASS                           = P_SETCLASS
      E_SETID                           = LV_SETID
      E_KOKRS                           = P_KOKRS
      E_MASTER_DATA                     = LS_MASTER_DATA
    TABLES
      T_NODES                           = LT_NODES
      T_VALUES                          = LT_VALUES_STD
      T_MASTER_DATA                     = LT_MASTER_STD
    CHANGING
      C_INFO                            = LS_INFO
      C_OVERWRITE                       = LV_OVERWRITE
    EXCEPTIONS
      NO_CONTROLLING_AREA               = 1
      NO_CHART_OF_ACCOUNT               = 2
      DIFFERENT_CONTROLLING_AREAS       = 3
      DIFFERENT_CHART_OF_ACCOUNTS       = 4
      SET_NOT_FOUND                     = 5
      ILLEGAL_FIELD_REPLACEMENT         = 6
      ILLEGAL_TABLE_REPLACEMENT         = 7
      FM_RAISE                          = 8
      CONVERT_ERROR                     = 9
      NO_OVERWRITE_STANDARD_HIER        = 10
      NO_BUKRS_FOR_KOKRS                = 11
      OTHERS                            = 12
            .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    EXIT.
  ENDIF.

  LT_VALUES = CORRESPONDING #( LT_VALUES_STD ).
  LT_MASTER_DATA = CORRESPONDING #( LT_MASTER_STD ).

  LOOP AT LT_NODES INTO DATA(LS_NODES).
    LV_TABIX = SY-TABIX.

    "상위노드 찾기
    CLEAR LV_RELATKEY.
    IF LS_NODES-HLEVEL > 0.
      WHILE LV_TABIX > 1.
        ADD -1 TO LV_TABIX.
        IF LT_NODES[ LV_TABIX ]-HLEVEL EQ LS_NODES-HLEVEL - 1.
          LV_RELATKEY = LT_NODES[ LV_TABIX ]-SHORTNAME.
          EXIT.
        ENDIF.
      ENDWHILE.
    ENDIF.

    "CLASS
      "CL_GUI_COLUMN_TREE=>ITEM_CLASS_TEXT.
      "CL_GUI_COLUMN_TREE=>ITEM_CLASS_CHECKBOX.
      "CL_GUI_COLUMN_TREE=>ITEM_CLASS_BUTTON.
      "CL_GUI_COLUMN_TREE=>ITEM_CLASS_LINK.
    "STYLE
      "CL_TREE_CONTROL_BASE=>STYLE_DEFAULT              "Normal
      "CL_TREE_CONTROL_BASE=>STYLE_INACTIVE             "Grey
      "CL_TREE_CONTROL_BASE=>STYLE_INTENSIFD_CRITICAL   "Red
      "CL_TREE_CONTROL_BASE=>STYLE_INTENSIFIED          "Blue
      "CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED           "Yellow background
      "CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_NEGATIVE  "Red background
      "CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_POSITIVE  "Green background
      "CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_A         "Blue background
      "CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_B         "Grey background
      "CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_C         "Orange background

    "노드 추가
    APPEND VALUE #( NODE_KEY  = LS_NODES-SHORTNAME      "노드키
                    RELATKEY  = LV_RELATKEY       "상위 노드키
                    HIDDEN    = ' '         "숨김 여부
                    DISABLED  = ' '         "이벤트 비활성화 여부
                    ISFOLDER  = 'X'         "폴더 여부 (SPACE는 Leaf로 표시)
                    N_IMAGE   = ICON_TREE         "기본 이미지
                    EXP_IMAGE = ICON_TREE         "펼쳤을때 이미지
                    STYLE     = SWITCH #( LS_NODES-HLEVEL WHEN 0 THEN CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_POSITIVE
                                                                 ELSE CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_C )
                    LAST_HITEM = '1'        "어느 컬럼까지를 HIERARCHY 로 표현할 것인지 필드명 입력
                    ) TO GT_NODES.

    "노드의 아이템(컬럼) 추가
    APPEND VALUE #( NODE_KEY  = LS_NODES-SHORTNAME
                    ITEM_NAME = '1'             "열이름 (LIST TREE에서는 숫자로만 사용)
                    CLASS     = CL_GUI_COLUMN_TREE=>ITEM_CLASS_TEXT "표시형식
                    T_IMAGE   = ' '      "아이콘
                    STYLE     = SWITCH #( LS_NODES-HLEVEL WHEN 0 THEN ' '
                                                                 ELSE CL_TREE_CONTROL_BASE=>STYLE_INTENSIFD_CRITICAL )
                    LENGTH    = 10        "표시 길이(LIST TREE에서만 사용)
                    TEXT      = LS_NODES-SHORTNAME ) TO GT_ITEMS.
    APPEND VALUE #( NODE_KEY  = LS_NODES-SHORTNAME
                    ITEM_NAME = '2'             "열이름 (LIST TREE에서는 숫자로만 사용)
                    CLASS     = CL_GUI_COLUMN_TREE=>ITEM_CLASS_TEXT "표시형식
                    T_IMAGE   = ' '      "아이콘
                    STYLE     = ' '
                    LENGTH    = 20        "표시 길이(LIST TREE에서만 사용)
                    TEXT      = LS_NODES-DESCRIPT ) TO GT_ITEMS.

    CLEAR LR_LEAF[].
    LOOP AT LT_VALUES INTO DATA(LS_VALUES) WHERE SETID EQ LS_NODES-SETID.
      APPEND VALUE #( SIGN = 'I'  OPTION = 'BT'
                      LOW  = LS_VALUES-VFROM
                      HIGH = LS_VALUES-VTO ) TO LR_LEAF.
    ENDLOOP.

    IF LR_LEAF[] IS NOT INITIAL.
      "노드(리프) 추가
      LOOP AT LT_MASTER_DATA INTO DATA(LS_LEAF) WHERE NAME IN LR_LEAF.
        APPEND VALUE #( NODE_KEY  = LS_LEAF-NAME      "노드키
                        RELATKEY  = LS_NODES-SHORTNAME       "상위 노드키
                        HIDDEN    = ' '         "숨김 여부
                        DISABLED  = ' '         "이벤트 비활성화 여부
                        ISFOLDER  = ' '         "폴더 여부 (SPACE는 Leaf로 표시)
                        N_IMAGE   = SWITCH #( P_SETCLASS WHEN '0101' THEN ICON_COST_CENTER WHEN '0106' THEN ICON_PROFIT_CENTER )         "기본 이미지
                        LAST_HITEM = '1'        "어느 컬럼까지를 HIERARCHY 로 표현할 것인지 필드명 입력
                        ) TO GT_NODES.
        "노드의 아이템(컬럼) 추가
        APPEND VALUE #( NODE_KEY  = LS_LEAF-NAME
                        ITEM_NAME = '1'             "열이름 (LIST TREE에서는 숫자로만 사용)
                        CLASS     = CL_GUI_COLUMN_TREE=>ITEM_CLASS_TEXT "표시형식
                        T_IMAGE   = ' '      "아이콘
                        STYLE     = ' '
                        LENGTH    = 10        "표시 길이(LIST TREE에서만 사용)
                        TEXT      = CONDENSE( |{ LS_LEAF-NAME ALPHA = OUT }| ) ) TO GT_ITEMS.
        APPEND VALUE #( NODE_KEY  = LS_LEAF-NAME
                        ITEM_NAME = '2'             "열이름 (LIST TREE에서는 숫자로만 사용)
                        CLASS     = CL_GUI_COLUMN_TREE=>ITEM_CLASS_TEXT "표시형식
                        T_IMAGE   = ICON_LED_GREEN      "아이콘
                        STYLE     = ' '
                        LENGTH    = 20        "표시 길이(LIST TREE에서만 사용)
                        TEXT      = LS_LEAF-TEXT ) TO GT_ITEMS.
        APPEND VALUE #( NODE_KEY  = LS_LEAF-NAME
                        ITEM_NAME = '3'             "열이름 (LIST TREE에서는 숫자로만 사용)
                        CLASS     = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT "표시형식
                        T_IMAGE   = ICON_LED_GREEN      "아이콘
                        STYLE     = CL_TREE_CONTROL_BASE=>STYLE_EMPHASIZED_C         "Orange background
                        LENGTH    = 30        "표시 길이(LIST TREE에서만 사용)
                        TEXT      = '추가적인 설명.....' ) TO GT_ITEMS.
      ENDLOOP.
    ENDIF.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CREATE_SIMPLE_TREE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREATE_SIMPLE_TREE .
  CHECK GO_GUI_LIST_TREE IS INITIAL.

  DATA LCL_TREE_EVENT TYPE REF TO LCL_TREE_EVENT_RECEIVER.

*  "트리를 표시한 컨테이너 생성
*  DATA LO_SPLITTER_CONTAINER  TYPE REF TO CL_GUI_SPLITTER_CONTAINER.
*  CREATE OBJECT LO_SPLITTER_CONTAINER
*    EXPORTING
*      PARENT  = CL_GUI_CONTAINER=>SCREEN0
*      ROWS    = 1
*      COLUMNS = 2
*    EXCEPTIONS
*      CNTL_ERROR        = 1
*      CNTL_SYSTEM_ERROR = 2
*      others            = 3.
*  IF SY-SUBRC <> 0.
*    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*    EXIT.
*  ENDIF.
*
*  DATA(LO_GUI_CONTAINER1) = LO_SPLITTER_CONTAINER->GET_CONTAINER( EXPORTING ROW = 1 COLUMN = 1 ).
*  DATA(LO_GUI_CONTAINER2) = LO_SPLITTER_CONTAINER->GET_CONTAINER( EXPORTING ROW = 1 COLUMN = 2 ).
*
*  LO_SPLITTER_CONTAINER->SET_COLUMN_WIDTH( EXPORTING ID = 1 WIDTH = 20 ).

  "트리의 hierarchy 컬럼 설정
  GS_HIERARCHY_HEADER-HEADING = '헤더 영역'.
  GS_HIERARCHY_HEADER-WIDTH   = 20.
  GS_LIST_HEADER-HEADING      = '내역 영역'.

  "노드의 컬럼 선택 여부 (X 일 경우 ITEM_DOUBLE_CLICK 이벤트 사용 가능)
  GV_ITEM_SELECTION = P_ITM_SE.

  "트리 오브젝트 생성
  CREATE OBJECT GO_GUI_LIST_TREE
    EXPORTING
*      LIFETIME                    =
      PARENT                      = CL_GUI_CONTAINER=>SCREEN0   "트리를 표시할 컨테이너
*      SHELLSTYLE                  =
      NODE_SELECTION_MODE         = CL_GUI_LIST_TREE=>NODE_SEL_MODE_SINGLE
*      HIDE_SELECTION              =
      ITEM_SELECTION              = GV_ITEM_SELECTION
      WITH_HEADERS                = 'X'
      HIERARCHY_HEADER            = GS_HIERARCHY_HEADER
      LIST_HEADER                 = GS_LIST_HEADER
*      NAME                        =
    EXCEPTIONS
      LIFETIME_ERROR              = 1
      CNTL_SYSTEM_ERROR           = 2
      CREATE_ERROR                = 3
      ILLEGAL_NODE_SELECTION_MODE = 4
      FAILED                      = 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.
    EXIT.
  ENDIF.

  "트리 이벤트 등록
  DATA LT_EVENTS TYPE CNTL_SIMPLE_EVENTS.
  LT_EVENTS = VALUE #( ( EVENTID = CL_GUI_LIST_TREE=>EVENTID_NODE_DOUBLE_CLICK  APPL_EVENT = ' ' ) ). "APPL_EVENT : X = 애플리케이션 이벤트가 되므로 PBO 및 PAI가 호출됨
  IF GV_ITEM_SELECTION IS NOT INITIAL.
    APPEND VALUE #( EVENTID = CL_GUI_LIST_TREE=>EVENTID_ITEM_DOUBLE_CLICK  APPL_EVENT = ' ' ) TO LT_EVENTS.
  ENDIF.

  GO_GUI_LIST_TREE->SET_REGISTERED_EVENTS( EXPORTING EVENTS = LT_EVENTS ).

  CREATE OBJECT LCL_TREE_EVENT.
  SET HANDLER LCL_TREE_EVENT->HANDLE_NODE_DOUBLE_CLICK FOR GO_GUI_LIST_TREE.
  SET HANDLER LCL_TREE_EVENT->HANDLE_ITEM_DOUBLE_CLICK FOR GO_GUI_LIST_TREE.


  "트리에 노드와 아이템(컬럼) 설정
  GO_GUI_LIST_TREE->ADD_NODES_AND_ITEMS(
    EXPORTING
      NODE_TABLE                     = GT_NODES
      ITEM_TABLE                     = GT_ITEMS
      ITEM_TABLE_STRUCTURE_NAME      = 'MTREEITM'
    EXCEPTIONS
      FAILED                         = 1
      CNTL_SYSTEM_ERROR              = 2
      ERROR_IN_TABLES                = 3
      DP_ERROR                       = 4
      TABLE_STRUCTURE_NAME_NOT_FOUND = 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.
    EXIT.
  ENDIF.

  "루트 노드 펼치기
  GO_GUI_LIST_TREE->EXPAND_ROOT_NODES( EXPORTING LEVEL_COUNT = 1 ).
ENDFORM.

댓글