フィールドシンポルの使用

 

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