ABAP
[ABAP] Field-Symbol을 사용해 동적으로 구성하기
mrexuex
2023. 4. 6. 14:55
: 왼쪽 내역필드에 Domain Fiexed Value를 가져와서 넣어야 하는데 한식, 중식, 일식, 후식 필드가 다 똑같은 상황. 인터널 테이블만 다른 똑같은 Loop를 4번 돌리기 싫어서 동적으로 구성하면 좋겠다고 생각함. DD07T 테이블이랑 Join을 걸어도 되지만 연습삼아 해도 좋은듯
TYPES : BEGIN OF LTY_TABNAME,
TABNAME TYPE STRING, "인터널 테이블명
END OF LTY_TABNAME.
DATA : LT_TABNAME TYPE TABLE OF LTY_TABNAME.
DATA : LS_DFIES TYPE DFIES, "도메인 속성
LT_VALUES TYPE DDFIXVALUES. "Fixed Value
DATA : LO_ELEM TYPE REF TO CL_ABAP_ELEMDESCR. "단일 변수 담당
FIELD-SYMBOLS : <FT_TAB> TYPE ANY TABLE,
<FS_GUBUN>,
<FS_GUBUN_TX>.
*->Main Data Select
SELECT *
FROM ZCMT010
INTO CORRESPONDING FIELDS OF TABLE @GT_TAB1. "한식
SELECT *
FROM ZCMT011
INTO CORRESPONDING FIELDS OF TABLE @GT_TAB2. "중식
SELECT *
FROM ZCMT012
INTO CORRESPONDING FIELDS OF TABLE @GT_TAB3. "일식
SELECT *
FROM ZCMT013
INTO CORRESPONDING FIELDS OF TABLE @GT_TAB4. "후식
*->Domain Fixed Value값 가져오기
LO_ELEM ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME('ZGUBUN_20806'). "정보를 알고 싶은 데이터 엘리먼트
LS_DFIES = LO_ELEM->GET_DDIC_FIELD( ). "해당 데이터 엘리먼트의 자세한 정보
LT_VALUES = LO_ELEM->GET_DDIC_FIXED_VALUES( ). "Domain Fixed Value 정보
*->Loop 대상 인터널 테이블명
LT_TABNAME = VALUE #( ( TABNAME = 'GT_TAB1' )
( TABNAME = 'GT_TAB2' )
( TABNAME = 'GT_TAB3' )
( TABNAME = 'GT_TAB4' ) ).
*->동적 인터널 테이블 구성
LOOP AT LT_TABNAME INTO DATA(LS_TABNAME).
ASSIGN (LS_TABNAME-TABNAME) TO <FS_TAB>. "<FS_TAB>에 각 인터널 테이블 데이터가 들어오게 됨
" <FS_TAB> 자체가 동적으로 구성되기 때문에 스트럭처도 동적으로 선언해줘야함
LOOP AT <FS_TAB> ASSIGNING FIELD-SYMBOL(<FS_STR>).
"주의할 점 : 모든 인터널 테이블에 GUBUN이라는 필드를 공통적으로 가지고 있어야 덤프가 안남
ASSIGN COMPONENT 'GUBUN' OF STRUCTURE <FS_STR> TO <FS_GUBUN>.
CHECK <FS_GUBUN> IS ASSIGNED.
READ TABLE LT_VALUES INTO DATA(LS_VALUES) WITH KEY LOW = <FS_GUBUN>.
"스트럭처가 동적이라 <FS_STR>-GUBUN_TX = LS_VALUES-DDTEXT 구문은 에러가 남(한개로 특정되지가 않아서)
ASSIGN COMPONENT 'GUBUN_TX' OF STRUCTURE <FS_STR> TO <FS_GUBUN_TX>.
<FS_GUBUN_TX> = LS_VALUES-DDTEXT.
ENDLOOP.
ENDLOOP.
반응형