메뉴 건너뛰기

SAP 한국 커뮤니티

트리 만들기

푸른밤 2007.07.31 16:14 조회 수 : 5343 추천:12

1. 머리말

다른 프로그래밍언어엔 디폴트로 트리 객체가
있습니다. 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에서도 트리구조를 쉽게 만들어낼 수 있게
됐습니다.