본문 바로가기

SAP/ABAP

동적 인터널 테이블( Dynamic Internal Table )

*Dynamic Internal Table

DATA : D_TAB   TYPE REF   TO DATA,
       D_LINE  TYPE REF   TO DATA,
       LT_FCAT TYPE TABLE OF LVC_S_FCAT,
       LS_FCAT LIKE LINE  OF LT_FCAT,
       NAMETAB LIKE DNTAB OCCURS 0 WITH HEADER LINE.

FIELD-SYMBOLS : <NEW_TAB>  TYPE TABLE,
                <NEW_LINE> TYPE ANY.

PARAMETERS : P_TNAME LIKE DD03L-TABNAME.

* Field catalog get
CALL FUNCTION 'NAMETAB_GET'
     EXPORTING
          LANGU          = SY-LANGU
          TABNAME        = P_TNAME
     TABLES
          NAMETAB        = NAMETAB
     EXCEPTIONS
          NO_TEXTS_FOUND = 1.

SORT NAMETAB BY POSITION.

CLEAR : LT_FCAT[].

LOOP AT NAMETAB.
* Internal table
  IF SY-SUBRC = 0.
    LS_FCAT-FIELDNAME =  NAMETAB-FIELDNAME.
    LS_FCAT-REF_TABLE =  P_TNAME.
    LS_FCAT-REF_FIELD =  NAMETAB-FIELDNAME.
    APPEND  LS_FCAT  TO LT_FCAT.
  ENDIF.
ENDLOOP.

IF  LT_FCAT[]  IS  INITIAL.
  STOP.
ENDIF.

* Internal table create
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
  EXPORTING
    IT_FIELDCATALOG = LT_FCAT
  IMPORTING
    EP_TABLE        = D_TAB.

ASSIGN D_TAB->*  TO  <NEW_TAB>.
CREATE DATA D_LINE LIKE LINE OF <NEW_TAB>.
ASSIGN D_LINE->* TO <NEW_LINE>.

BREAK-POINT.

위 소스는 일반적인 동적 인터널 테이블을 선언할때 쓰이는 방법중 하나이다.

리포트를 만들어서 그대로 써 넣으면 마지막 BREAK-POINT.을 타고 디버깅하면

<NEW_TAB>이 PARAMETER값에 입력한 테이블로 바뀌어 있다.

(테이블 유효성 체크 로직이 없는데 써 넣으면 된다.)

'SAP > ABAP' 카테고리의 다른 글

SMW0  (0) 2014.08.25
= '' 와 = ' '가 같다?  (0) 2010.07.19
message 띄우기..  (0) 2010.07.19
테이블 Lock걸렸을때  (0) 2010.07.19
ABAP 시스템 변수  (0) 2008.05.08