動的なデータオブジェクト

 

このトピックは動的なデータオブジェクトを取り上げて、その特徴と使用方法を説明します。

動的なデータオブジェクトを説明する前にまず静的なデータオブジェクトを説明しておきます。

プログラムの宣言部分において DATAなどの命令を使用して定義するデータオブジェクトはすべて静的に登録され、プログラムの起動時にはすでに存在する「静的なデータオブジェクト」となります。

一方、動的なデータオブジェクトとは、プログラム実行時に、CREATE DATA命令を使用して作成されるデータオブジェクトです。

動的なデータオブジェクトは以下の特徴があります。

  • 現在の ABAPプログラムの内部セッションの中にデータオブジェクトが登録されます。
  • 動的なデータ型を利用することができます。
  • 登録されるデータオブジェクトは独自の名称を持ちません。データ参照変数を使用した場合にのみアドレス指定することができます。
  • 内容をアクセスするにはフィールドシンボルを利用しなければなりません。

静的なデータ型使用の場合

静的なデータ型を利用して動的なデータオブジェクトを作成するには、TYPEオプションを使用します。 TYPEオプションの使い方は基本DATA命令と同じですが、タイプ名を指定する際に動的な名称も使用可能です。 以下のような型を使用することができます。

  • ABAP基本タイプ
    CREATE DATA dref TYPE c LENGTH 3.
  • TYPESによって定義された任意のデータ型
    TYPES TYP_BKPF TYPE STANDARD TABLE OF BKDF
    CREATE DATA dref TYPE TYP_BKPF.
  • ABAP ディクショナリによる任意のデータ型
    CREATE DATA dref TYPE BKDF.
    CREATE DATA dref TYPE STANDARD TABLE OF BKDF

サンプルソース:

DATA typ  TYPE c.
DATA len  TYPE i.
DATA dref TYPE REF TO data.
FIELD-SYMBOLS <fs> TYPE ANY.

typ = 'c'.
len = 30.
CREATE DATA dref TYPE (typ) LENGTH len.

ASSIGN dref->* TO <fs>.
<fs> =  'ABCDEF'.
write <fs>.

動的なデータ型使用の場合

実行時データ型サービス (RTTS) データ型オブジェクトによって記述される動的なデータ型のデータオ ブジェクトを生成するには、TYPE HANDLEオプションを使います。

サンプルソース:

DATA:
      r_stru TYPE REF TO cl_abap_structdescr,
      it_comp TYPE cl_abap_structdescr=>component_table,
      r_comp TYPE abap_componentdescr,
      r_elem TYPE REF TO cl_abap_elemdescr,
      r_data TYPE REF TO DATA.

DATA: length_of_field
          TYPE I VALUE 10.
FIELD-SYMBOLS: <fs> TYPE ANY.

START-OF-SELECTION.
r_elem = cl_abap_elemdescr=>get_c( length_of_field ).

r_comp-name = 'FIELD1'.
r_comp-type  = r_elem.

APPEND r_comp TO it_comp.
r_stru = cl_abap_structdescr=>create( it_comp ).

 CREATE DATA r_data TYPE HANDLE r_stru.
 ASSIGN r_data->('FIELD1') TO <fs>.

<fs> = 'ABC'.
WRITE: / <fs>.