さて、今回は、フィールドシンボルの使用例です。
個人的にですが、私はABAPプログラムを組む際は、レンジテーブルを多用するタイプです。
好みがあるので、あまり使わない人もいるかも知れませんが、やっぱり便利さに負けて、
いつも使ってしまいます。
と、いうことで!今回はレンジテーブルに条件を追加するサブルーチンの紹介です。
レンジテーブルは、常に「Sign」「Option」「Low」「High」の4項目しかありません。
しかし、定義するときに、参照する項目が変わると、「Low」「High」の属性が応じて
変わってしまうので、レンジテーブルを多用する私にとっては、複数のレンジテーブル、
それぞれにレコードを追加するロジックを書くだけで、結構な量のStep数になってしまいかねません。
そこで!以下のようなサブルーチンを使って、処理を共通化させています。
どれだけ、有効化は、さだかではありませんが・・・
*----------------------------------------------------------------------*
* レンジテーブルの編集
*----------------------------------------------------------------------*
* -->U_SIGN SIGN
* -->U_OPTION OPTION
* -->U_LOW LOW
* -->U_HIGH HIGH
* <--LT_TABLE レンジテーブル
*----------------------------------------------------------------------*
FORM EDIT_RANGE_TABLE USING U_SIGN
U_OPTION
U_LOW
U_HIGH
CHANGING LT_TABLE TYPE TABLE.
DATA: L_RNG_HD TYPE REF TO DATA, "参照
L_CTR_ITEM TYPE I. "項目カウント
FIELD-SYMBOLS: <LS_HD>, "ヘッダ
<LS_ITM>. "項目
* レンジテーブルの構造を参照したデータオブジェクトを作成
CREATE DATA L_RNG_HD LIKE LINE OF LT_TABLE.
* データオブジェクト(内部テーブルのヘッダ領域)をフィールドシンボルに割り当て
ASSIGN L_RNG_HD->* TO <LS_HD>.
* ヘッダ領域の項目分繰り返す(レンジテーブルは、絶対4項目なので4回固定)
* ループしない方法でも記述することは可能
DO 4 TIMES.
ADD 1 TO L_CTR_ITEM.
* ヘッダ領域の項目を左から順にフィールドシンボルに割り当てる
ASSIGN COMPONENT L_CTR_ITEM OF STRUCTURE <LS_HD> TO <LS_ITM>.
CASE L_CTR_ITEM.
WHEN 1. "Sign
MOVE U_SIGN TO <LS_ITM>.
WHEN 2. "Option
MOVE U_OPTION TO <LS_ITM>.
WHEN 3. "Low
MOVE U_LOW TO <LS_ITM>.
WHEN 4. "High
MOVE U_HIGH TO <LS_ITM>.
ENDCASE.
ENDDO.
* レンジテーブルにレコードを追加
APPEND <LS_HD> TO LT_TABLE.
ENDFORM. " EDIT_RANGE_TABLE
興味があれば、使ってみてください。
