✏️ 작성일 : 25.04.08
🛠️ 추가사항 : 25.04.15 - 궁금점 의문
필드 심볼은 동적으로 데이터를 변경할 수 있는 로직이다.
로직을 짜는 입장에서 편하긴하지만 네이밍 관리 / 유지보수 관점에서 다른 사람들 코드를 보면 어려울 수도 있을 것 같다는 느낌적인 느낌 😉
[ 결론 ]
- 변수 네이밍 관리를 잘해줘야겠다 → 나중에 유지보수 입장에서 보면 헷갈릴 수도..?
- 각 타입을 지정해줄 수 있지만 ANY / ANY TABLE 을 통해 어떤 형태던지 ASSIGN 가능함
- LOOP를 통해 MODIFY 해줄 필요없이 바로바로 변경이 가능함. → 유지보수는 모르겠고 일단 편리함. 👍🏻
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> ).
일단 위에서 필드심볼 타입을 지정한 이유는 루프를 돌때, 테이블의 값을 변경해주고자 했다.ASSIGN을 해줬음에도 불구하고 <FS_LIST>-CARRID 를 했을 때, Component가 없다는 오류가 발생했고 이를 해결하고자 타입을 준 것 !
그래서 실험을 해봄.
테이블을 ASSIGN 해주고 ASSIGN 된 테이블을 루프를 돌려줬다.
변경하고자하는 변수를 ASSIGN COMPONENT 를 사용하여 ASSIGN 한 뒤 변경했다.
- ❗신문법으로 작성해서 TO FIELD-SYMBOL 을 쓴거지 위에서 FIEID-SYMBOL 선언한 뒤 그냥 TO 만 사용해도 무방하다.