実行時データ型識別

 

実行時データ型識別、略語は RTTI です。プログラム実行時にデータ型を識別して処理を行う仕組みです。。

DESCRIBE FIELD命令を使用して、変数のデータタイプを取得することができます。

構文

DESCRIBE FIELD obj TYPE typ.

  • obj
    データ型を取得したいデータオブジェクト。通常の変数やフィールドシンポルなどを使用することができます。
  • typ
    取得したデータ型が格納されるデータオブジェクト。

データ型

データ型は1 桁のIDで識別され、IDでは大文字と小文字が区別されます。

IDデータ型
b基本タイプB:1バイト整数(内部用)
C基本タイプC:固定長テキスト項目
D基本タイプD:日付項目
F基本タイプF:浮動小数点数
g基本タイプSTRING:可変長文字順序
h内部テーブル
i基本タイプI:整数
lデータ参照
N基本タイプN:数値テキスト項目
P基本タイプP:パック数値
rオブジェクト参照
s基本タイプS:2バイト整数(内部用)
T基本タイプT:時刻項目
uフラット構造
vディープ構造
X基本タイプX:16進数
y基本タイプXSTRING:可変長バイト順序

サンプルソース

FORM PARSE_STRING_TO_STRUC   USING    U_STR TYPE STRING
                        CHANGING C_STRUC.
  CONSTANTS:
    CONST_DT_DATE TYPE C VALUE 'D',
    CONST_TAB            TYPE STRING VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

  DATA:
   VL_STRINGS  TYPE STRING_TABLE, 
   VL_STR  TYPE STRING,
   VL_DATE TYPE D,
   VL_TYPE TYPE C.
  FIELD-SYMBOLS:
    <FS_WA>   TYPE ANY,
    <FS_COMP> TYPE ANY.


   SPLIT U_STR AT CONST_TAB INTO TABLE VL_STRINGS.

   ASSIGN C_STRUC TO <FS_WA>.

   TRY.

          LOOP AT TG_STRING INTO VG_STRING.
            ASSIGN COMPONENT SY-TABIX OF STRUCTURE <FS_WA> TO <FS_COMP>.

            DESCRIBE FIELD <FS_COMP> TYPE vl_type.

            IF vl_type = CONST_DT_DATE.    "日付型
               CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
                 EXPORTING
                   date_external            = VL_STR
                   accept_initial_date      = 'X'
                 IMPORTING
                   date_internal            = vl_date
                 EXCEPTIONS
                   date_external_is_invalid = 1
                 OTHERS                   = 2.

               IF sy-subrc = 0.
                 VL_STR = vl_date.
               ENDIF.
                ENDIF.
             ENDIF.

            MOVE VL_STR TO <FS_COMP>.

          ENDLOOP.

        CATCH CX_SY_CONVERSION_ERROR.
          CLEAR: EX_AFDATA.
      ENDTRY.
ENDFORM.

CL_ABAP_TYPEDESCR

|
|--CL_ABAP_DATADESCR
|     |
|     |--CL_ABAP_ELEMDESCR
|     |--CL_ABAP_REFDESCR
|     |--CL_ABAP_COMPLEXDESCR
|         |
|         |--CL_ABAP_STRUCTDESCR
|         |--CL_ABAP_TABLEDESCR
|
|--CL_ABAP_OBJECTDESCR
      |
      |--CL_ABAP_CLASSDESCR
       |--CL_ABAP_INTFDESCR

データ型を判定

型毎のメタ情報

属性名意味基本型参照型構造型テーブル型クラス型インタフェース型
absolute_name型名称
type_kind内部ABAPデータ型
length内部長
decimals小数桁数P×××××
OUTPUT_LENGTH出力長×××××
STRUCT_KIND構造タイプ×××××
COMPONENTSコンポーネント(name/type_kind/length/decimals)テーブル×××××
KEYテーブルキー×××××
INITIAL_SIZEテーブルの初期サイズ×××××
KEY_DEFKINDテーブルデータ型定義×××××
HAS_UNIQUE_KEY一意キー定義×××××
TABLE_KINDテーブルカテゴリ×××××
CLASS_KINDクラスタイプ×××××
CREATE_VISIBILITY可視性登録×××××
INTF_KINDインタフェースタイプ×××××