DESCRIBEFIELD

実行時データ型識別、略語は 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: 
TYPE ANY, 
TYPE ANY. 


SPLIT U_STR AT CONST_TAB INTO TABLE VL_STRINGS. 

ASSIGN C_STRUC TO . 

TRY.

LOOP AT TG_STRING INTO VG_STRING. 
ASSIGN COMPONENT SY-TABIX OF STRUCTURE TO . 

DESCRIBE FIELD 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 . 

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 インタフェースタイプ × × × × ×  
上一篇:OpenCL 从零开始学习OpenCL开发


下一篇:rsync