[ABAP] SPLIT, Field Symbol, Define을 이용한 Internal Table 데이터 삽입.

SAPCO·2023년 7월 7일
0

- [ABAP]

목록 보기
3/18

0. 도입

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로 받아올 때 ','를 구분자로 데이터를 구분하여 테이블에 삽입해주어야한다.

1. 코드

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.

2. Field Symbol

필드심볼에 대한 이해가 필요하다.
ASSIGN 후에 INITIAL 체크해야한다

1. 단순 ASSIGN

=> gt_dips-name는 A01로 변경됨

ASSIGN gt_disp-name TO <fs>.
    <fs> = 'A01'.

2. 동적 FIELD-SYMBOL

( ) 안의 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'.

3. STRUCTURE의 N번째 필드 ASSIGN

gt_disp 의 3번째 필드를 assign 한다.

ASSIGN COMPONENT 3 OF STRUCTURE gt_disp TO <fs>.

4. STRUCTURE 필드 ASSIGN

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>.

5. TABLES로 선언된 TABLE FIELD를 ASSIGN

SFLIGHT-CARRID가 <fs>에 assign.

TABLES: SFLIGHT.
lv_text = 'SFLIGHT-CARRID'.
ASSIGN TABLE FIELD lv_text  TO <fs>.

3. Define

&2를 '&2'로 문자열로 받을 수 있다.
wa가 있는 테이블의 경우 &2는 wa, &2[ ]는 테이블.


참고

profile
SAP CO

0개의 댓글