메뉴 건너뛰기

SAP 한국 커뮤니티

트리 만들기

푸른밤 2007.07.31 16:14 조회 수 : 5351 추천: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에서도 트리구조를 쉽게 만들어낼 수 있게
됐습니다.
번호 제목 글쓴이 날짜 조회 수
387 미니 SAP 설치 메뉴얼 입니다. [5] 신종철™ 2007.09.17 4574
386 사용자별 Upload & Download 기본값 [1] 홍성현 2007.08.09 3661
385 Python과 SAP RFC 통신 [3] 홍성현 2007.08.09 5808
384 ABAP TIP [4] file 둘리67 2007.10.03 5952
383 4.6에서 ALV 필드 변경 안될때 버퍼 지우는 방법 신종철 2007.08.10 4780
382 ABAP에서 웹브라우져 호출 홍성현 2007.08.09 8321
381 간단팁2 : 특정 값으로 구분된 텍스트, 한방에 분리 및 각각의 변수에 저장 [2] 윤훈태 2007.10.15 4138
380 ICON ascii code [3] file sapjoy 2007.10.05 5004
379 조회조건 동적으로 보이기 [5] 신종철™ 2007.08.20 4771
» 트리 만들기 [6] 푸른밤 2007.07.31 5351
377 주민번호 체크 [3] 임선미 2007.10.23 4795
376 그룹을 이용하여 SAP PRD 시스템 접속하기 [2] file 이명환 2007.10.18 4531
375 스페이스를 2자리로 먹을때 1자리로 먹게 바꾸기 [1] 신종철™ 2007.08.20 3952
374 Internal table 사용시 속도개선을 위한 구문 [16] 노름마치 2007.11.14 10014
373 NATIVE SQL의 INSERT 문 [4] sapjoy 2007.11.13 6258
372 Tip : 전표 라인 아이템 Direct 조회 [5] 2007.10.23 10166
371 새로운 Print format 추가하기 [5] file 이명환 2007.10.18 3679
370 SAP 어플리케이션의 구성 [3] file 노름마치 2007.10.10 3897
369 widget을 이용한 Job monitor 데모 [1] 해처리 2007.10.24 3603
368 FIELD-SYMBOL설명 및 예제 프로그램 [17] Delight 2008.04.30 9448