Abapteur Note
심플 트리 (SIMPLE TREE) 본문
SAP에서는 화면에 데이터를 띄우는 방법은 여러가지이다.
ALV, 모듈 풀 등..
ABAP에서는 SIMPLE TREE, COLUMN TREE, ALV TREE, LIST TREE 구조가 존재한다.
오늘 포스팅은 SIMPLE TREE이다.
Simple Tree
CL_GUI_SIMPLE_TREE 클래스를 사용하는 트리 구조이다.
최상위 노드인 ROOT와 하위 노드를 이루고 있다.
* 체크박스, 추가적인 아이콘을 사용할 수 없다.
* 헤더라인이 존재하지 않는다.
TYPES: NODE_TABLE_TYPE LIKE TABLE OF MTREESNODE WITH DEFAULT KEY.
DATA: TREE_CON_REF TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.
TABLES: SFLIGHT, SCARR.
DATA: BEGIN OF GS_SFLIGHT.
INCLUDE STRUCTURE SFLIGHT.
DATA:END OF GS_SFLIGHT.
DATA GT_SFLIGHT LIKE TABLE OF GS_SFLIGHT.
DATA: GS_TAB TYPE SFLIGHT,
GT_TAB TYPE TABLE OF SFLIGHT,
GS_TAB2 TYPE SCARR,
GT_TAB2 TYPE TABLE OF SCARR.
DATA: OK_CODE TYPE SY-UCOMM.
DATA: GO_CONTAINER_0100 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GO_ALV_GRID_0100 TYPE REF TO CL_GUI_ALV_GRID,
GS_VARIANT TYPE DISVARIANT,
GV_SAVE TYPE C VALUE 'A', " 저장모드 A: 개인용(U) + 공개용 (X)
GS_LAYOUT_0100 TYPE LVC_S_LAYO,
GS_FIELDCAT_0100 TYPE LVC_S_FCAT,
GT_FIELDCAT_0100 TYPE LVC_T_FCAT.
FIELD-SYMBOLS : <FCAT> TYPE LVC_T_FCAT.
TOP 선언부: TREE 관련 내용 참고
MTREESNODE, CL_GUI_SIMPLE_TREE 등
MODULE INIT_TREE OUTPUT.
IF G_TREE IS INITIAL.
DATA NODE_TABLE TYPE NODE_TABLE_TYPE.
DATA: G_APPLICATION TYPE REF TO LCL_APPLICATION.
DATA: EVENTS TYPE CNTL_SIMPLE_EVENTS.
DATA: EVENT TYPE CNTL_SIMPLE_EVENT.
CREATE OBJECT TREE_CON_REF
EXPORTING
CONTAINER_NAME = 'TREE_CONTAINER'. " Name of the Screen CustCtrl Name to Link Container To
IF SY-SUBRC <> 0.
MESSAGE 'TREE_CON_REF 생성 실패' TYPE 'E'.
ENDIF.
CREATE OBJECT G_TREE
EXPORTING
PARENT = TREE_CON_REF " Parent Container
NODE_SELECTION_MODE = CL_GUI_SIMPLE_TREE=>NODE_SEL_MODE_SINGLE.
PERFORM BUILD_NODE_TABLE USING NODE_TABLE.
CALL METHOD G_TREE->ADD_NODES
EXPORTING
TABLE_STRUCTURE_NAME = 'MTREESNODE' " Name of Structure of Node Table
NODE_TABLE = NODE_TABLE. " Node table
CREATE OBJECT G_APPLICATION.
EVENT-EVENTID = CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK.
EVENT-APPL_EVENT = 'X'.
APPEND EVENT TO EVENTS.
CALL METHOD G_TREE->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = EVENTS " Event Table
EXCEPTIONS
OTHERS = 1
.
SET HANDLER G_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR G_TREE.
ENDIF.
ENDMODULE.
TREE MODULE 선언부
PERFORM BUILD_NODE_TABLE 를 통해 노드를 구성한다
G_APPLICATION 클래스를 이용하여 노드 클릭시 발생하는 이벤트 생성
SET_REGISTERED_EVENT 메소드를 통해 이벤트 등록
SET HANDLER 또한 상동 (ALV와 클래스 등록 방식이 비슷함)
FORM BUILD_NODE_TABLE USING NODE_TABLE TYPE NODE_TABLE_TYPE.
DATA NODE LIKE MTREESNODE.
CLEAR NODE.
NODE-NODE_KEY = 'Root'.
NODE-ISFOLDER = 'X'.
NODE-TEXT = 'AIRPLANE'.
APPEND NODE TO NODE_TABLE.
CLEAR NODE.
NODE-NODE_KEY = 'Child1'.
NODE-RELATKEY = 'Root'.
NODE-ISFOLDER = 'X'.
NODE-TEXT = 'CARRID'.
NODE-EXPANDER = ''.
APPEND NODE TO NODE_TABLE.
CLEAR NODE.
NODE-NODE_KEY = 'AA'.
NODE-RELATKEY = 'Child1'.
NODE-ISFOLDER = 'X'.
NODE-TEXT = 'AA'.
APPEND NODE TO NODE_TABLE.
CLEAR NODE.
NODE-NODE_KEY = 'AZ'.
NODE-RELATKEY = 'Child1'.
NODE-N_IMAGE = '@10@'.
NODE-TEXT = 'AZ'.
APPEND NODE TO NODE_TABLE.
CLEAR NODE.
NODE-NODE_KEY = 'DL'.
NODE-RELATKEY = 'Child1'.
NODE-EXPANDER = ''.
NODE-DISABLED = ''.
NODE-TEXT = 'DL'.
APPEND NODE TO NODE_TABLE.
CLEAR NODE.
NODE-NODE_KEY = 'LH'.
NODE-RELATKEY = 'Child1'.
NODE-EXPANDER = ''.
NODE-DISABLED = ''.
NODE-TEXT = 'LH'.
APPEND NODE TO NODE_TABLE.
ENDFORM.
노드 구성 부분
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.
CLASS LCL_APPLICATION IMPLEMENTATION.
METHOD HANDLE_NODE_DOUBLE_CLICK.
PERFORM NODE_DOUBLE_CLICK_0100 USING NODE_KEY.
PERFORM REFRESH_ALV.
ENDMETHOD.
ENDCLASS.
클래스 선언부
더블클릭시 BUILD_NODE_TABLE에서 구성한 노드의 NODE-KEY 기준으로 데이터를 조회하여 ALV를 띄워준다.
'SAP > ABAP' 카테고리의 다른 글
ALV EDIT 모드 전환 (0) | 2024.03.10 |
---|---|
컬럼 트리(Column 트리) (0) | 2024.02.01 |
BDC (0) | 2023.12.31 |
SEARCH HELP 생성 <파라미터, 셀렉트옵션> (0) | 2023.12.19 |
필드 심볼 <FIELD SYMBOL> (0) | 2023.12.17 |