✏️ Field Symbol

빵섭·2025년 4월 8일
0

✏️ ABAP 공부

목록 보기
6/14
post-thumbnail

✏️ 작성일 : 25.04.08
🛠️ 추가사항 : 25.04.15 - 궁금점 의문

💡 Field Symbol

필드 심볼은 동적으로 데이터를 변경할 수 있는 로직이다.

로직을 짜는 입장에서 편하긴하지만 네이밍 관리 / 유지보수 관점에서 다른 사람들 코드를 보면 어려울 수도 있을 것 같다는 느낌적인 느낌 😉

💡 공부해보기

[ 결론 ]

  1. 변수 네이밍 관리를 잘해줘야겠다 → 나중에 유지보수 입장에서 보면 헷갈릴 수도..?

  2. 각 타입을 지정해줄 수 있지만 ANY / ANY TABLE 을 통해 어떤 형태던지 ASSIGN 가능함

  3. LOOP를 통해 MODIFY 해줄 필요없이 바로바로 변경이 가능함. → 유지보수는 모르겠고 일단 편리함. 👍🏻

💡 CODE


DATA : gv_scarr TYPE scarr-carrid,

       gs_scarr TYPE scarr,

       gt_scarr LIKE TABLE OF gs_scarr,

       gs_spfli TYPE spfli,

       gt_spfli LIKE TABLE OF gs_spfli.


SELECT *
  INTO CORRESPONDING FIELDS OF TABLE gt_scarr
  FROM scarr.

SELECT *
  INTO CORRESPONDING FIELDS OF TABLE gt_spfli
  FROM spfli.

*----------------------------------------------------------------------*

FIELD-SYMBOLS :<fv1>     LIKE gs_scarr-carrid,
               <fv2>,
               <fs>      LIKE gs_scarr,
               <ft1>     LIKE gt_scarr,
               <ft2>     TYPE ANY TABLE.

* ASSIGN 을 통해 필드심볼에 값을 지정해줄 수 있음.
ASSIGN : gv_scarr  TO <fv1>,
         gv_scarr  TO <fv2>,
         gs_scarr  TO <fs>,
         gt_scarr  TO <ft1>,
         gt_spfli  TO <ft2>.

LOOP AT <ft1> ASSIGNING FIELD-SYMBOL(<fs_list>).

  <fs_list>-carrid = 'BB'.

ENDLOOP.

cl_demo_output=>display( <ft1> ).

💡 Field Symbol 피드백 사항

[ ANY / ANY 테이블을 사용해야하는 이유 ]

❓ Q1. 필드심볼의 타입을 지정하면 필드심볼을 사용하는 의미가 없다.


일단 위에서 필드심볼 타입을 지정한 이유는 루프를 돌때, 테이블의 값을 변경해주고자 했다.

ASSIGN을 해줬음에도 불구하고 <FS_LIST>-CARRID 를 했을 때, Component가 없다는 오류가 발생했고 이를 해결하고자 타입을 준 것 !

그래서 실험을 해봄.

❗A1. 필드심볼의 타입을 지정하면 동일한 타입만 ASSIGN 이 가능하다. 😄 → ANY 혹은 ANY TABLE 을 사용하자 !


[ ASSIGN COMPONENT '필드' OF STRUCTURE 스트럭처 TO FIELD-SYMBOL(필드심볼) ]

❓ Q2. TYPE 을 지정해주지 않고 ASSIGN 했을땐 어떻게 바꿔야할까?

❓ A2. ASSIGN COMPONENT 를 통해 해결 !

  1. 테이블을 ASSIGN 해주고 ASSIGN 된 테이블을 루프를 돌려줬다.

  2. 변경하고자하는 변수를 ASSIGN COMPONENT 를 사용하여 ASSIGN 한 뒤 변경했다.

  • ❗신문법으로 작성해서 TO FIELD-SYMBOL 을 쓴거지 위에서 FIEID-SYMBOL 선언한 뒤 그냥 TO 만 사용해도 무방하다.

profile
ABAP / SAP

0개의 댓글