ra_tb1 range table에 lt_tb1테이블의 tb1컬럼의 데이터를
I EQ data1
I EQ data2
I EQ data3 ...
반복해서 넣으려는 작업.
i_tbt : 테이블 형식으로 한 컬럼으로 구성되어있고 여러 row의 데이터가 들어온다.
i_tb1 : 111,222,333,444,555
i_tb2 : aaa,bbb,ccc,ddd,eee
i_tb3 : a,b,c,d,e,f,g
이런식으로 파라미터가 import된다.
웹에서 데이터를 aaa,bbb,ccc,ddd,eee,fff로 받아올 때 ','를 구분자로 데이터를 구분하여 테이블에 삽입해주어야한다.
Define을 만들어 코드중복을 최소화 하려고 했다.
테이블명은 앞뒤로 '_'가 구분자이고, 인터널테이블명과 컬럼의 이름이 동일한 것을 이용해서 ASSIGN COMPONENT를 이용해서 해당 인터널테이블명(ex tb1)의 컬럼(tb1)값을 필드심볼을 이용하여 가져왔다.
RANGES : ra_tbt FOR table-tbt,
ra_tb1 FOR table-tb1,
ra_tb2 FOR table-tb2,
ra_tb3 FOR table-tb3,
SPLIT i_tb1 at ',' INTO TABLE lt_tb1.
SPLIT i_tb2 at ',' INTO TABLE lt_tb2.
SPLIT i_tb3 at ',' INTO TABLE lt_tb3.
_g_rng_table:
ra_tbt i_tbt, ra_tb1 lt_tb1, ra_tb2 lt_tb2, ra_tb3 lt_tb3.
DATA : lv_tbname1 TYPE CHAR10,
lv_tbname2 TYPE CHAR10.
FIELD-SYMBOLS : <fs5>.
DEFINE _g_rng_tb.
REFRESH : &1.
SPLIT '&2' at '_' INTO lv_tbname1 lv_tbname2.
IF &2[] IS NOT INITIAL.
LOOP AT &2.
ASSIGN COMPONENT lv_tbname2 OF STRUCTURE &2 TO <fs5>.
_g_rg : &1 'I' 'EQ' <fs5> space.
ENDLOOP.
ENDIF.
END-OF-DEFINITION.
필드심볼에 대한 이해가 필요하다.
ASSIGN 후에 INITIAL 체크해야한다
=> gt_dips-name는 A01로 변경됨
ASSIGN gt_disp-name TO <fs>.
<fs> = 'A01'.
( ) 안의 VALUE를 하나의 변수로 보는것. gt_disp-name 의 value 인 lv_text가 <fs>
에 ASSIGN.
lv_text 는 'RESULT'로 변경됨.
DATA: lv_text TYPE string VALUE 'TEST'.
gt_disp-name = lv_text.
ASSIGN (gt_disp-name) TO <fs>.
<fs> = 'RESULT'.
gt_disp 의 3번째 필드를 assign 한다.
ASSIGN COMPONENT 3 OF STRUCTURE gt_disp TO <fs>.
1), 2) 둘다 동일하게 gt_disp-connid 가 <fs>
에 assign.
1) lv_text = 'CONNID'.
ASSIGN COMPONENT lv_text OF STRUCTURE gt_disp TO <fs>.
2) lv_text = 'GT_DISP-CONNID'.
ASSIGN COMPONENT (lv_text) TO <fs>.
3) ASSIGN COMPONENT lv_idx1 OF STRUCTURE struc TO .
display_out에 '1'값이 담김. struc-lv_idx1
FIELD-SYMBOLS : <fs>.
DATA BEGIN OF struc [READ-ONLY].
DATA : lv_index VALUE '1',
DAT END OF struc.
ASSIGN COMPONENT lv_idx1 OF STRUCTURE struc TO <fs>.
DATA(display_out) = <fs>.
SFLIGHT-CARRID가 <fs>
에 assign.
TABLES: SFLIGHT.
lv_text = 'SFLIGHT-CARRID'.
ASSIGN TABLE FIELD lv_text TO <fs>.
&2를 '&2'로 문자열로 받을 수 있다.
wa가 있는 테이블의 경우 &2는 wa, &2[ ]는 테이블.
참고
- field symbol : https://moon-7.tistory.com/6
- field symbol : https://only10.tistory.com/entry/SAP-ABAP-%EA%B0%9C%EB%B0%9C%EA%BF%80%ED%8C%81-ASSIGN-COMPONENT-%EB%AC%B8%EB%B2%95%ED%99%9C%EC%9A%A9
- 나머지 직접 작성 및 정보 재가공.