実行時データ型識別、略語は 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 インタフェースタイプ × × × × ×  

DESCRIBEFIELD的更多相关文章

随机推荐

  1. Using nxlog4go for Testing Environment

    nxlog4go is very simple to use without any configuring, setting. For example: package main import ( ...

  2. 《浪潮之巅》(第2版):精彩的IT商战史

    2011年看过第一版.以为看新版会跳过大部分看过的内容,结果发现还是从头到尾看了一遍,2011年看过的内容已经记不太确切了:) 另外IT的历史太精彩了,许多故事都知道,再看还是挺有意思.当然作者的文字 ...

  3. Android开发最佳学习路线图(转)

    Android开发总体路线图:  基础学习——JavaSE:        很多朋友一上手就开始学习Android,似乎太着急了一些. Android应用程序开发是以Java语言为基础的,所以没有扎实 ...

  4. (String)、toString()与String.valueOf()的区别

    (String).Object.toString()正常情况下跟String.valueOf()没有区别. 但当Object是null的时候.toString会抛出异常.valueOf返回" ...

  5. Android(java)学习笔记32:Android布局详解之一:FrameLayout

    1. FrameLayout是最简单的布局了.所有放在布局里的控件,都按照层次堆叠在屏幕的左上角.后加进来的控件覆盖前面的控件. 在FrameLayout布局里,定义任何空间的位置相关的属性都毫无意义 ...

  6. 【转】应用程序的入口是ActivityThread

    ActivityThread运行框架 在分析中,我们可以看到真正对应应用进程的不是Application而是ActivityThread.我们从实际的应用堆栈可以看到: NavitiveStart.m ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 A.Hard to prepare 【规律递推】

    任意门:https://nanti.jisuanke.com/t/31453 A.Hard to prepare After Incident, a feast is usually held in ...

  8. log4j+AOP 记录错误日志信息到文件中

    AOP 采用异常通知切入,把指定包的异常记录到日志文件. 先看log4j.properties ,控制台输出的是普通信息, 文件输出的是异常信息. log4j.rootLogger=DEBUG, Co ...

  9. linnx 修改ip地址

    vi /etc/sysconfig/network-scripts/ifcfg-eth0 [编辑网卡的配置文件] 输入上述命令后回车,打开配置文件,使用方向键移动光标到最后一行,按字母键“i”,进入编 ...

  10. mysql安装下载

    简单介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最 ...