実行時データ型識別

 

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

DESCRIBE FIELD命令を使用

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. 

RTTS関連クラスを使用

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インタフェースタイプ×××××
ログインするとコメントできます。