フィールドシンポルの使用
フィールドシンボルとは、物理的なメモリを占有せずに、任意の変数(単一変数、構造、内部テーブルなど)に 割り当てる(Assign)ことで、任意の変数を指し示すことができます。C言語でいうポインタのようなものです。
宣言
フィールドシンボルを宣言するには、以下のような構文を使用します。
FIELD-SYMBOLS <FS> [< データ型 >|STRUCTURE <s> DEFAULT <wa>]. <FS>にある角かっこも構文の一部です、タイプ指定しない場合は、TYPE ANYで宣言することができます。
FIELD-SYMBOLS <FS1> TYPE ANY. FIELD-SYMBOLS <FS2> TYPE ANY TABLE.
割り当て
Assign命令を使います。
参照と書き込み
フィールドシンボルにやまかっこをつけて、フィールドシンボルがアドレスするデータを参照または書き込みすることができます。
FORM f_get_range_table USING u_setclass u_subclass u_setname CHANGING r_range TYPE TABLE. DATA: lt_set LIKE setleaf OCCURS 0 WITH HEADER LINE, wl_range TYPE REF TO DATA . FIELD-SYMBOLS : <fs_rec>,<fs_itm> . SELECT * FROM setleaf INTO TABLE lt_set WHERE setclass = u_setclass AND subclass = u_subclass AND setname = u_setname. LOOP AT lt_set. CREATE DATA wl_range LIKE LINE OF r_range. ASSIGN wl_range->* TO <fs_rec>. ASSIGN COMPONENT 'SIGN' OF STRUCTURE <fs_rec> TO <fs_itm>. <fs_itm> = lt_set-valsign. ASSIGN COMPONENT 'OPTION' OF STRUCTURE <fs_rec> TO <fs_itm>. <fs_itm> = lt_set-valoption. ASSIGN COMPONENT 'LOW' OF STRUCTURE <fs_rec> TO <fs_itm>. <fs_itm> = lt_set-valfrom. ASSIGN COMPONENT 'HIGH' OF STRUCTURE <fs_rec> TO <fs_itm>. <fs_itm> = lt_set-valto. APPEND wl_range to r_range. ENDLOOP. ENDFORM.