본문 바로가기
ABAP

Field-symbols 1

by clode 2023. 2. 16.
728x90
반응형

선언만 된 상태에서는 필드 심볼은 다른 데이터 오브젝트를 가리킬 수 있는 포인터만 생성된다. 프로그램이 실행되고 ASSIGN 구문을 만나게 되면 포인터가 데이터 오브젝트에 연결된다. 그리고 필드 심볼의 값을 변경하게 되면 변숫값도 변경된다.

특징

  • 필드심볼은 메모리 값을 할당하지 않는다.

  • 필드심볼 타입 따로 지정안해주면, 명시되지 않으면 TYPE ANY로 되서 할당되는 필드와 타입 맞춰준다.

  • 필드심볼은 generic type과 fully type으로 구분된다.

    • fully type : 필드심볼의 기술적인 속성은 할당되는 데이터 오브젝트와 같아야한다. 선언할때부터 타입이 정해진다.

    • generic type : 할당되는 데이터 오브젝트 유형에 따라 기술적인 속성을 상속받는다. ASSIGN될때 기술적 타입이 결정된다.


Field Symbol Assign

  • 기본적으로 ASSIGN 구문을 이용하여 할당을 한다.
  • Variable, Internal Table, Structure 모두 할당이 가능하다.
DATA: BEGIN OF GS_DATA,
          VAR1 TYPE I,
          VAR2 TYPE I,
          VAR3 TYPE I,
          END OF GS_DATA,
          GT_DATA LIKE TABLE OF GS_DATA.

FIELD-SYMBOLS : <FS_TAB> TYPE ANY TABLE,
                <FS_STRC> LIKE GS_DATA.

CLEAR: GS_DATA.
GS_DATA-VAR1 = 10.
GS_DATA-VAR2 = 20.
GS_DATA-VAR3 = 30.
APPEND GS_DATA TO GT_DATA.

CLEAR: GS_DATA.
GS_DATA-VAR1 = 40.
GS_DATA-VAR2 = 50.
GS_DATA-VAR3 = 60.
ASSIGN GT_DATA TO <FS_TAB>.

LOOP AT <FS_TAB> ASSIGNING <FS_STRC>.
  WRITE:/ <FS_STRC>-VAR1, <FS_STRC>-VAR2, <FS_STRC>-VAR3.
ENDLOOP.

디버깅을 보면 이해하기 그나마 쉽다..


Field Symbol Dynamic Assign

  • 사용하려는 필드명이 프로그램 실행도중 결정이 되는 경우 사용한다.
  • ASSIGN (FIELDNAME) TO <FS>
DATA: GV_VAL1 TYPE C VALUE 'A',
      GV_VAL2 TYPE C VALUE 'B',
      GV_VAL3 TYPE C VALUE 'C',
      GV_VAL4 TYPE C VALUE 'D',
      GV_VAL5 TYPE C VALUE 'E'.

DATA: GV_FNAME TYPE CHAR20,
      GV_INDEX TYPE N.

FIELD-SYMBOLS <FS>, "ANY TYPE

DO 5 TIMES.
  CLEAR: GV_FNAME.
  GV_INDEX = SY-INDEX.
  CONCATENATE 'GV_VAL' GV_INDEX INTO GV_FNAME. "GV_VAL+GV_INDEX => GV_FNAME에 들어가서
  ASSIGN (GV_FNAME) TO <FS>.
  "여기서 GV_FNAME은 CHAR20의 GV_FNAME이 아닌 위에 GV_VAL+GV_INDEX가 된다
  "만약 1번째 줄이면 GV_FNAME은 GV_VAL1이 된다.
  WRITE: / GV_FNAME, ':', <FS>.
ENDDO.

만약 1번째 TIME이라면 SY-INDEX는 1번째줄이 되고 GV_FNAME은 GV_VAL1이 된다. ASSIGN뒤에 오는 GV_FNAME은 그러면 GV_VAL1이 되는거고 GV_VAL1의 해당 값 VALUE를 <FS>에 넣어주게 된다.


Field Symbol Structure Field Assign

  • Structure의 개별 필드를 필드 심볼에 Assign
  • ASIGN COMPONENT [COMP] OF [STRUCTURE] TO <FS>
  • ASSIGN COMPONENT 필드순서, 필드명 OF STURCTURE <FS>
DATA: BEGIN OF GS_DATA,
      VAR1 TYPE CHAR10,
      VAR2 TYPE CHAR10,
      VAR3 TYPE CHAR10,
      END OF GS_DATA,
      GT_DATA LIKE TABLE OF GS_DATA.

FIELD-SYMBOLS : <FS>,
                <FS_STRC> LIKE GS_DATA.

CLEAR: GS_DATA.
GS_DATA-VAR1 = 10.
GS_DATA-VAR2 = 20.
GS_DATA-VAR3 = 30.
APPEND GS_DATA TO GT_DATA.

CLEAR: GS_DATA.
GS_DATA-VAR1 = 40.
GS_DATA-VAR2 = 50.
GS_DATA-VAR3 = 60.
APPEND GS_DATA TO GT_DATA.

LOOP AT GT_DATA ASSIGNING <FS_STRC>..
  DO 3 TIMES.
    ASSIGN COMPONENT SY-INDEX OF STRUCTURE <FS_STRC> TO <FS>. 
    "1번째 INDEX면 FS_STRC의 첫번째줄이 해당
    WRITE: <FS>.
  ENDDO.
  WRITE: /.
ENDLOOP.

728x90
반응형

'ABAP' 카테고리의 다른 글

BDC 프로그램  (0) 2023.02.16
Field-symbols 2  (0) 2023.02.16
RFC 6  (0) 2023.02.16
RFC 5  (0) 2023.02.16
RFC 4  (0) 2023.02.14

댓글