300x250
728x90
FIELD-SYMBOLS이란
: 자신의 메모리 공간을 갖지 않고 해당하는 변수에 Assign 해주고 동적인 접근을 가능하게 해주는 것.
여기서 중요한 건
FIELD-SYMBOLS에 타입을 선언했을 때
그냥 선언했을 때와
TYPE ANY을 썼을 때
차이점을 알아 볼 것이다.
말로 이해가 안 갈 수 있기 때문에 다음 로직에 디버깅을 통해서 알아보자.
- <FS1>, <FS3>는 TYPE을 지정을 안 해주었기 때문에 자동적으로 TYPE C(1)이 된다.
- <FS2>는 TYPE ANY을 지정해주었기 때문에 ASSIGN 구문을 타지 않는 이상 데이터를 확인할 수 없다.
<FS1> , <FS2>를 비교해보면
<FS1>는 ASSIGN을 통해서 타입이 MATNR 필드로 바뀌게 되었으며
<FS2>는 ASSIGN을 만나지 않았기 때문에 값이 없는 상태이다.
여기서 중요한 것은 이 상태로 PERFORM을 타게 된다면 덤프가 발생이 된다.
# 그 이유는 <FS2>는 데이터가 없는 상태이기 때문에 없는 값을 PERFORM을 통해서 넘길려고 하니깐 덤프가 발생 하는 것이다.
그래서 필드심볼을 선언 할 때는 잘 알고 선언하는 것이 중요하다
결국 차이점은
<FS1>, <FS3>은 ASSIGN이 자동적으로 되어있다. 타입은 C(1)
<FS2>은 ASSIGN을 만나기 전 까지는 값이 없다.
로 결론이 났다.
전체적인 로직
DATA:
GS_MARA TYPE MARA.
FIELD-SYMBOLS:
<FS1>,
<FS2> TYPE ANY,
<FS3>.
IF <FS1> IS ASSIGNED.
BREAK-POINT.
ENDIF.
SELECT SINGLE *
FROM MARA
INTO GS_MARA.
ASSIGN COMPONENT 'MATNR' OF STRUCTURE GS_MARA
TO <FS1>.
PERFORM XXXX
USING
GS_MARA
<FS1>
CHANGING
<FS2>.
BREAK-POINT.
FORM XXXX
USING
VALUE(PS_MARA) TYPE MARA
VALUE(P_1)
CHANGING
P_2.
IF PS_MARA-MATNR IS NOT INITIAL.
BREAK-POINT.
ENDIF.
IF P_1 IS INITIAL.
BREAK-POINT.
ENDIF.
ENDFORM.
728x90
'.ABAP > ..모든 것' 카테고리의 다른 글
SAP Memory 조회 (0) | 2022.11.11 |
---|---|
SAP SET/GET Parameter ID (0) | 2022.11.11 |
SAP ABAP 연산자 (3) | 2022.09.20 |
SAP TabStrip(Report Program) 정리 (6) | 2022.08.11 |
SAP Concatenate New Syntax (0) | 2022.08.08 |