1. 머리말
다른 프로그래밍언어엔 디폴트로 트리 객체가
있습니다. ABAP에선 뭐 별로 쓰일 일은 없지만,
간혹 필요할 때가 생길 수도 있겠죠?
2. 힌트
인터널 테이블 만들어서, 함수만 부르면 됩니다.
함수명: RS_TREE_CONSTRUCT
3. 예제
말로 설명하는 것보단 소스를 동봉하는 게 오히
려 직관적일 것 같습니다.
다음 소스를 참고하세요.
4. 참고사항
SAP 4.6 버전을 기준으로 설명드립니다.
다음 메뉴에 가보시면, 위의 트리를 포함
해서 재밌는 예제를 볼 수 있습니다.
Tools -->
ABAP Workbench -->
Overview -->
SE80 Object Navigator -->
Environment -->
Ergonomics examples -->
List, Screen
5. 결론
ABAP에서도 트리구조를 쉽게 만들어낼 수 있게
됐습니다.
다른 프로그래밍언어엔 디폴트로 트리 객체가
있습니다. ABAP에선 뭐 별로 쓰일 일은 없지만,
간혹 필요할 때가 생길 수도 있겠죠?
2. 힌트
인터널 테이블 만들어서, 함수만 부르면 됩니다.
함수명: RS_TREE_CONSTRUCT
3. 예제
말로 설명하는 것보단 소스를 동봉하는 게 오히
려 직관적일 것 같습니다.
다음 소스를 참고하세요.
REPORT YHSYTREE01 LINE-SIZE 90 NO STANDARD PAGE HEADING.
*---------------------------------------------------------------------*
* Report YHSYTREE01 *
* Description : 트리 만들기 *
* Date : 2000년 07월 12일 *
* Developer : 한상열 *
* Reference : ERGP2600 *
*---------------------------------------------------------------------*
***********************************************************************
************************ Global data **********************************
***********************************************************************
DATA: LENGTH TYPE I VALUE 30. " Length of list
DATA: BEGIN OF TP OCCURS 10, ID, NR(8), TEXT(255), END OF TP.
DATA: TXT_REPORT LIKE DOKHL-OBJECT. "Report name for documentation
DATA: BEGIN OF MYLIST OCCURS 50. " Internal table hierarchy
INCLUDE STRUCTURE SNODETEXT.
DATA: END OF MYLIST.
DATA: F15 TYPE C.
DATA: SEED1 TYPE I, " Rand number seed 1
SEED2 TYPE I, " Rand number seed 2
SEED3 TYPE I, " Rand number seed 3
WIDTH TYPE I. " Width of list
***********************************************************************
************************** Main Program *******************************
***********************************************************************
START-OF-SELECTION.
SET PF-STATUS 'LIBS1'.
SET TITLEBAR '001'.
* 트리에 들어갈 인터널 테이블 만들기
PERFORM FILL_ITAB.
* 트리구조 만들기
CALL FUNCTION 'RS_TREE_CONSTRUCT'
TABLES
NODETAB = MYLIST
EXCEPTIONS
TREE_FAILURE = 1.
IF SY-SUBRC = 1.
ELSE.
ENDIF.
* 트리구조 화면출력
SY-LSIND = 0.
CALL FUNCTION 'RS_TREE_LIST_DISPLAY'
EXPORTING
CALLBACK_PROGRAM = 'YHSYTREE01'
CALLBACK_USER_COMMAND = 'NODE_SELECT'
IMPORT!ING
F15 = F15.
***********************************************************************
************************** Form Routines ******************************
***********************************************************************
*---------------------------------------------------------------------*
* FORM FILL_ITAB *
*---------------------------------------------------------------------*
* Fills the internal table for hierarchy list *
*---------------------------------------------------------------------*
FORM FILL_ITAB.
DATA: HELP TYPE P DECIMALS 1.
MYLIST-NAME = '1 Root'.
MYLIST-COLOR = 1.
MYLIST-INTENSIV = '1'.
MYLIST-TEXT = '루트'.
MYLIST-TLENGTH = 16.
MYLIST-TLEVEL = 1.
MYLIST-TCOLOR = 1.
MYLIST-TINTENSIV = '1'.
MYLIST-TEXT1 = '루트의 텍스트 설명'.
MYLIST-TLENGTH1 = 30.
MYLIST-TCOLOR1 = 0.
MYLIST-TINTENSIV1 = '0'.
APPEND MYLIST.
MYLIST-NAME = '2 두번째 레벨'.
MYLIST-COLOR = 0.
MYLIST-INTENSIV = '0'.
MYLIST-TEXT = '시도로 구분'.
MYLIST-TLENGTH = 14.
MYLIST-TLEVEL = 2.
MYLIST-TCOLOR = 7.
MYLIST-TINTENSIV = '1'.
MYLIST-TEXT1 = '시도명'.
MYLIST-TLENGTH1 = 30.
MYLIST-TCOLOR1 = 0.
MYLIST-TINTENSIV1 = '0'.
APPEND MYLIST.
MYLIST-NAME = '3 세번째 레벨'.
MYLIST-COLOR = 0.
MYLIST-INTENSIV = '0'.
MYLIST-TEXT = '서울'.
MYLIST-TLENGTH = 15.
MYLIST-TLEVEL = 3.
MYLIST-TCOLOR = 7.
MYLIST-TINTENSIV = '0'.
MYLIST-TEXT1 = '서울의 여러 구'.
MYLIST-TLENGTH1 = 30.
MYLIST-TCOLOR1 = 0.
MYLIST-TINTENSIV1 = '0'.
APPEND MYLIST.
MYLIST-NAME = '4 네번째 레벨'.
MYLIST-COLOR = 0.
MYLIST-INTENSIV = '0'.
MYLIST-TEXT = '동작구'.
MYLIST-TLENGTH = 20.
MYLIST-TLEVEL = 4.
MYLIST-TCOLOR = 2.
MYLIST-TINTENSIV = '1'.
MYLIST-TEXT1 = '울 회사 있는 구'.
APPEND MYLIST.
MYLIST-NAME = '3 세번째 레벨'.
MYLIST-COLOR = 0.
MYLIST-INTENSIV = '0'.
MYLIST-TEXT = '경기도'.
MYLIST-TLENGTH = 15.
MYLIST-TLEVEL = 3.
MYLIST-TCOLOR = 7.
MYLIST-TINTENSIV = '0'.
MYLIST-TEXT1 = '경기도의 여러 도시 명'.
MYLIST-TLENGTH1 = 30.
MYLIST-TCOLOR1 = 0.
MYLIST-TINTENSIV1 = '0'.
APPEND MYLIST.
MYLIST-NAME = '3 세번째 레벨'.
MYLIST-COLOR = 0.
MYLIST-INTENSIV = '0'.
MYLIST-TEXT = '전라북도'.
MYLIST-TLENGTH = 15.
MYLIST-TLEVEL = 3.
MYLIST-TCOLOR = 7.
MYLIST-TINTENSIV = '0'.
MYLIST-TEXT1 = '전라북도의 여러 도시 명'.
MYLIST-TLENGTH1 = 30.
MYLIST-TCOLOR1 = 0.
MYLIST-TINTENSIV1 = '0'.
APPEND MYLIST.
MYLIST-NAME = '2 두번째 레벨'.
MYLIST-COLOR = 0.
MYLIST-INTENSIV = '0'.
MYLIST-TEXT = '큰 구분'.
MYLIST-TLENGTH = 14.
MYLIST-TLEVEL = 2.
MYLIST-TCOLOR = 7.
MYLIST-TINTENSIV = '1'.
MYLIST-TEXT1 = '지방명'.
MYLIST-TLENGTH1 = 30.
MYLIST-TCOLOR1 = 0.
MYLIST-TINTENSIV1 = '0'.
APPEND MYLIST.
ENDFORM.
*---------------------------------------------------------------------*
* FORM NODE_SELECT *
*---------------------------------------------------------------------*
* Handles selection of nodes *
*---------------------------------------------------------------------*
FORM NODE_SELECT TABLES KNOTEN STRUCTURE SEUCOMM
USING COMMAND
CHANGING EXIT
LIST_REFRESH.
DATA: ANTWORT.
* Processing of commands for hierarchy list
CASE COMMAND.
* F2 = Select
WHEN 'TRSL'. "F2 wurde gedr?kt
* WRITE: 'Auswahl des Knotens', KNOTEN-NAME.
EXIT = ' '.
* F3 = Back
* WHEN 'TRRT'. "Zur?k
* CALL FUNCTION 'POPUP_TO_CONFIRM!_STEP'
* EXPORTING
* DEFAULTOPTION = 'Y'
* TEXTLINE1 = 'Soll die Hierarchie vorher '
* TEXTLINE2 = 'gesichert werden?'
* TITEL = 'Hierarchie verlassen'
* START_COLUMN = 25
* START_ROW = 6
* IMPORT!ING
* ANSWER = ANTWORT.
* CASE ANTWORT.
* WHEN 'J'.
* " Sichern
* EXIT = 'X'.
* WHEN 'N'.
* EXIT = 'X'.
* WHEN 'A'.
* EXIT = ' '.
* ENDCASE.
* F15 = Exit
* WHEN 'TREX'. "Beenden
* CALL FUNCTION 'POPUP_TO_CONFIRM!_STEP'
* EXPORTING
* DEFAULTOPTION = 'Y'
* TEXTLINE1 = 'Soll die Hierarchie vorher '
* TEXTLINE2 = 'gesichert werden?'
* TITEL = 'Hierarchie beenden'
* START_COLUMN = 25
* START_ROW = 6
* IMPORT!ING
* ANSWER = ANTWORT.
* CASE ANTWORT.
* WHEN 'J'.
* " Sichern
* EXIT = 'X'.
* WHEN 'N'.
* EXIT = 'X'.
* WHEN 'A'.
* EXIT = ' '.
* ENDCASE.
* Cancel hierarchy
* WHEN 'TRCN'.
*
* CALL FUNCTION 'POPUP_TO_CONFIRM!_LOSS_OF_DATA'
* EXPORTING
* TEXTLINE1 = 'M?hten Sie die Hierarchie'
* TEXTLINE2 = 'abbrechen?'
* TITEL = 'Hierarchie abbrechen'
* START_COLUMN = 25
* START_ROW = 6
* IMPORT!ING
* ANSWER = ANTWORT.
* CASE ANTWORT.
* WHEN 'J'.
* " Sichern
* EXIT = 'X'.
* WHEN 'N'.
* EXIT = ' '.
* ENDCASE.
WHEN 'ERLE'.
TXT_REPORT = 'ERGP2600'.
CALL FUNCTION 'ERGO_TEXT_SHOW'
EXPORTING
TEXTNAME = TXT_REPORT
ID = 'RE'
LANGU = SY-LANGU
EXCEPTIONS
TEXT_NOT_FOUND = 01.
ENDCASE.
LIST_REFRESH = 'X'.
ENDFORM.
************************************************************************
*************************** Events *************************************
************************************************************************
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'ERLE'.
TXT_REPORT = 'YHSYTREE01'.
CALL FUNCTION 'ERGO_TEXT_SHOW'
EXPORTING
TEXTNAME = TXT_REPORT
ID = 'RE'
LANGU = SY-LANGU
EXCEPTIONS
TEXT_NOT_FOUND = 01.
ENDCASE.
4. 참고사항
SAP 4.6 버전을 기준으로 설명드립니다.
다음 메뉴에 가보시면, 위의 트리를 포함
해서 재밌는 예제를 볼 수 있습니다.
Tools -->
ABAP Workbench -->
Overview -->
SE80 Object Navigator -->
Environment -->
Ergonomics examples -->
List, Screen
5. 결론
ABAP에서도 트리구조를 쉽게 만들어낼 수 있게
됐습니다.