フィールドシンボルとは、物理的なメモリを占有せずに、任意の変数(単一変数、構造、内部テーブルなど)に 割り当てる(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.