PR

【ABAP】FIELD-SYMBOLS命令―フィールドシンボルを3分で

ABAP

本ページでFIELD-SYMBOLS命令(フィールドシンボルとは何か?)をご説明します。

フィールドシンボルとは、その名の通り「シンボル」です。つまり、他の変数や・構造・内部テーブルを指し示すリンクやショートカットのようなイメージです。

このページでは、初心者泣かせのフィールドシンボルについて1から分かりやすく解説します。

このページで学べる内容
  • フィールドシンボルとは何か?
  • FIELD-SYMBOLS命令の使い方
  • FIELD-SYMBOLS命令を用いたサンプルコード
  • FIELD-SYMBOLS命令の注意点・落とし穴

ABAPerを目指す方であれば知らないと恥ずかしい基本知識です。是非最後までご覧ください。

スポンサーリンク

構文ルール:FIELD-SYMBOLS命令

まずは、フィールドシンボルの宣言方法から。

* フィールドシンボルの宣言
FIELD-SYMBOLS <フィールドシンボル名> .

FIELD-SYMBOLS命令では<>が必須。<>によって、それがフィールドシンボルであると識別されます。

* フィールドシンボルの宣言NG例「<>なしはダメ」
FIELD-SYMBOLS フィールドシンボル名 .

また、フィールドシンボルの宣言はDATA命令などと同様に、ABAPプログラム中の任意の場所で行うことができますが、クラスやインターフェースの宣言部分に記述することはできません。

また、フィールドシンボルの割り当て先のデータ型が分かっている場合はDATA命令と同じようにTYPEオプションを利用してデータ型を指定することができます。

*----------------------------------------------------------------------*
*   FIELD-SYMBOLS
*----------------------------------------------------------------------*
FIELD-SYMBOLS:
  <FS_S_TABLE> TYPE STANDARD TABLE,
  <FS_TABLE>   TYPE TABLE,
  <FS_LINE1>   TYPE ANY,
  <FS_LINE2>   TYPE ANY.

フィールドシンボルとは?

フィールドシンボルとは何か?

一言で言うと、変数や構造などのデータオブジェクトを指し示すシンボルです。

フィールドシンボル

上記の図では、<fs>が「変数A」を指し示しています。つまり、<fs>は「変数A」の代わりとして扱えるということを示しています。

もし、フィールドシンボル<fs>に値を代入しようとすれば、それはすなわち「変数A」を操作しているのと同じになるのです。これが、フィールドシンボルの基本的なイメージです。

より専門的な表現をすると、フィールドシンボルは変数Aのメモリのアドレス値を保持しているということができます。

フィールドシンボルの実際の利用方法を見ていきながら、より具体的なイメージを頭に思い浮かべましょう。

FIELD-SYMBOLS命令:サンプルコード

フィールドシンボルの宣言と、参照先変数への割り当て(ASSIGN命令)のサンプルコードです。

* フィールドシンボルの宣言
FIELD-SYMBOLS: <FS1> TYPE ANY.
 
DATA a TYPE C.
c = 'Hello World'.

* 変数aを<FS1>に割り当て
ASSIGN a TO <FS1>.

WRITE <FS1>.  ⇒結果「Hello World」

変数aを<FS1>に割り当てました。図で表すと以下のような状態です。

* 変数aを<FS1>に割り当て
ASSIGN a TO <FS1>.

<FS1>は変数aを参照している状態ということ。すなわち、<FS1>に対して何らかの処理を行った場合は、変数aに対して処理を行っていると同意です。そのため、<FS1>をWRITEすれば変数aの値が表示されるということになります。

もう1つサンプルコードを見てみましょう。

* フィールドシンボルの宣言
FIELD-SYMBOLS: <FS1> TYPE ANY.
 
DATA a TYPE C.

* 変数aを<FS1>に割り当て
ASSIGN a TO <FS1>.

<FS1> = 'Hello World'

WRITE a.  ⇒結果「Hello World」

今度は逆に<FS1>に対して「Hello World」を格納しています。<FS1>は変数aを参照していますので、変数aに値が格納しているのと同じ状態になります。

これが、フィールドシンボルの初歩的な使い方です。

LOOP ~ ASSIGNING <FS>

LOOP処理では、オプション「ASSIGNING」を利用することで処理対象レコードをフィールドシンボルに割り当てることができます。

以下は内部テーブルに格納したユーザ情報をLOOPしながら、パスワードを変更するプログラムの抜粋です。

* フィールドシンボルの宣言
FIELD-SYMBOLS:
  <FS_USR_DATA> TYPE USR_DATA.     

LOOP AT USR_DATA ASSIGNING <FS_USR_DATA>.
  " パスワード変更
  CALL FUNCTION 'BAPI_USER_CHANGE'
    EXPORTING
      USERNAME  = <FS_USR_DATA>-USERID  " フィールドシンボルのユーザID項目
      PASSWORD  = 'initpass'
      PASSWORDX = 'X'
    TABLES
      RETURN    = LDT_RTN.
ENDLOOP.

同じ処理をフィールドシンボルを利用せずにコーディングしたのがこちら。

* フィールドシンボルの宣言
DATA:
  W_USR_DATA TYPE USR_DATA.     

LOOP AT USR_DATA INTO W_USR_DATA.
  " パスワード変更
  CALL FUNCTION 'BAPI_USER_CHANGE'
    EXPORTING
      USERNAME  = W_USR_DATA-USERID  " 構造のユーザID項目
      PASSWORD  = 'initpass'
      PASSWORDX = 'X'
    TABLES
      RETURN    = LDT_RTN.
ENDLOOP.

フィールドシンボルを利用することで、作業用の構造を定義する必要がなくなり、プログラム実行中に消費するメモリを削減することができます。

このフィールドシンボルの使い方は、もっとも頻繁に目にする形です。しっかりと理解しておきましょう。

SAP / ABAPを1から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました