トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

ABAP/ASSIGN の変更点

Top/ABAP/ASSIGN

[[ABAP]]の命令の一つで、[[データオブジェクト>アドオン/データオブジェクト]]を[[フィールドシンボル>ABAP/FIELD-SYMBOLS]]に割り当てる命令。

* 概要 [#j4d77dd6]
** 用法 [#m1e61e8f]
[[変数>アドオン/変数]]そのものでなく[[変数>アドオン/変数]]のメモリ上のアドレスを参照する取り扱いとする命令。

アドレス参照であり実態のある値そのものを取り扱わないため、パフォーマンスが向上する。
また、[[内部テーブル>ABAP/内部テーブル]]の更新を[[MODIFY>ABAP/MODIFY]]命令を書かずに実行できるなど、コードの総量を削減する手段にもなる。

また、[[内部テーブル>ABAP/内部テーブル]]の更新を[[MODIFY>ABAP/MODIFY]]命令を書かずに実行できるなどコードの総量を削減する手段にもなるが、''逆に言えば更新の可能性がゼロでなくなる''とも言えるため留意すること。

** サンプル [#p8e30ede]
*** ASSIGN a TO b. [#o56d4e18]
# ASSIGN a TO b.
 ASSIGN a TO b.

最もシンプルな使い方。
型の取り扱いにより、下記のオプションもあり。

# ASSIGN a TO b CASTING TYPE C
# ASSIGN a TO b CASTING TYPE P DECIMALS 2
# ASSIGN a TO b TYPE C
# ASSIGN a TO b RANGE wa
 ASSIGN a TO b CASTING TYPE C
 ASSIGN a TO b CASTING TYPE P DECIMALS 2
 ASSIGN a TO b TYPE C
 ASSIGN a TO b RANGE wa

なお、

# a = 'L_WA_HEADER-BUKRS'.
# ASSIGN (a) TO b.
 a = 'L_WA_HEADER-BUKRS'.
 ASSIGN (a) TO b.

という書き方をすることによって、参照元を動的に指定することもできる。

*** ASSIGN COMPONENT index OF STRUCTURE wa TO fs [#kcf144da]
# ASSIGN COMPONENT L_LOOP_COUNTER OF STRUCTURE L_WA_KNA1 TO <F_FIELDS>.
 ASSIGN COMPONENT L_LOOP_COUNTER OF STRUCTURE L_WA_KNA1 TO <F_FIELDS>.

構造のn番目の項目にアクセスする、という方法。
例えばI/Fファイルなどにおいて、月別の項目が1〜12月まで並んでいる場合など、それぞれに対する処理をベタ書きすると個別のバグなども出るが、まとまりごとに同じ処理にすることで不具合の発生とコード総量の削減を狙うことができる。
例えばI/Fファイルなどにおいて、月別の項目が1~12月まで並んでいる場合など、それぞれに対する処理をベタ書きすると個別のバグなども出るが、まとまりごとに同じ処理にすることで不具合の発生とコード総量の削減を狙うことができる。

*** ASSIGN dataref->* TO fs [#v90d4f05]
[[CREATE DATA>ABAP/CREATE DATA]]命令と併用する形で、データ型を任意に定義しつつ命令を使いまわすことができる。

*** ASSIGN a INCREMENT n TO fs. [#le5f9c69]
使ったことがない。

* その他 [#lb3435f1]
ASSIGNが失敗した場合に代入しようとすると[[ショートダンプ>SAPの共通用語/ショートダンプ]]が発生するため、[[例外処理>アドオン/例外処理]]はきっちりやること。
なお、必要に応じて[[UNASSIGN>ABAP/UNASSIGN]]命令で参照を切るか、まとまりの良い[[サブルーチン>アドオン/サブルーチン]]でのみ使用するなど、トレーサビリティが低下しないようケアすべきだ。
なお、必要に応じて[[UNASSIGN>ABAP/UNASSIGN]]命令で参照を切るか、まとまりの良い[[サブルーチン>アドオン/サブルーチン]]でのみ使用するなど、トレーサビリティが低下しないようケアすべき。

~
~
CENTER:【スポンサードリンク】
#htmlinsert(amazon_book_sap_system_implement)
~
~
----
#pcomment(reply)