構造化データオブジェクト struc については、以下の命令を使用して、
ASSIGN COMPONENT comp OF STRUCTURE struc TO <fs>.
コンポーネントの 1 つである comp をフィールドシンボル <fs> に割り当てることができます。コンポーネント comp をリテラルまたは変数として指定することができます。comp が c 型であるか、コンポーネントとして内部テーブルを持たない構造である場合には、comp によってコンポーネントの名称が指定されます。comp が他の基本データ型を持つ場合には i 型へと変換され、comp によりコンポーネントの番号が指定されます。割当が成功すると sy-subrc に 0 が設定されます。失敗すると 4 が返されます。
この命令は、構造化データオブジェクトのコンポーネントを動的にアドレス指定する際に特に重要です。フィールドシンボルに対してデータオブジェクトをジェネリックな方法で割り当てるか、キャスティングを使用するか、プロシージャのパラメータインタフェースにジェネリックな方法で受け渡す場合には、静的または動的にそのコンポーネントをアドレス指定することはできません。その代わりに上記の命令を使用しなければなりません。その場合には、コンポーネント名または索引番号を使用した間接的なアクセスが可能になります。
REPORT demo_field_symbols_stat_assign .
DATA: BEGIN OF line,
col1 TYPE i VALUE 11,
col2 TYPE i VALUE 22,
col3 TYPE i VALUE 33,
END OF line.
DATA comp(5) TYPE c VALUE 'COL3'.
FIELD-SYMBOLS: <f1> TYPE ANY, <f2> TYPE ANY, <f3> TYPE ANY.
ASSIGN line TO <f1>.
ASSIGN comp TO <f2>.
DO 3 TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE <f1> TO <f3>.
WRITE <f3>.
ENDDO.
ASSIGN COMPONENT <f2> OF STRUCTURE <f1> TO <f3>.
WRITE / <f3>.
一覧出力は以下のとおりです。
11 22 33
33
”フィールドシンボル <f1> は構造 line を、<f2> は項目 comp をポイントします。DO ループでは、line のコンポーネントはその番号により指定され、1 つずつ <f3> に割り当てられます。ループの後で、コンポーネント col3 がその名称により指定され、<f3> に割り当てられます。<f1> のコンポーネントをアドレス指定するために使用できる唯一の手段が ASSIGN COMPONENT であることに注意してください。<f1>-col1 のような式は構文的に誤っています。“