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インタフェースタイプ××××× 

转载于:https://www.cnblogs.com/yjyongil/p/10558591.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值