実行時データ型識別、略語は 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. python入门11 元组tuple

    tuple元组是一种不可变数据类型,也是一种序列,因此可用序列的各类方法,比如切片和索引 #coding:utf-8 #/usr/bin/python """ 2018- ...

  2. bash: ./adb: No such file or directory

    运行adb出现这种错误: bash: ./adb: No such file or directory   但adb确实存在. 可能1.你用的是64位的Linux,没装32位运行时库,安装 $ sud ...

  3. Power Designer逆向工程连接数据库创建pdm-oracle

    1.进入菜单文件-Reverse Engineer-Database... 2.打开窗口,选择数据库版本,点击[确定] 3.打开窗口,选择Usering a data source: 4.如果已经有d ...

  4. POJ-2828 Buy Tickets---线段树+逆序

    题目链接: https://cn.vjudge.net/problem/POJ-2828 题目大意: 插队的问题,每个案例给出n,代表有n个插队的,每个给出p,v,意思是代号为v的人插在了第p个人的后 ...

  5. 【洛谷5294】[HNOI2019] 序列(主席树维护单调栈+二分)

    点此看题面 大致题意: 给你一个长度为\(n\)的序列\(A\),每次询问修改一个元素(只对当前询问有效),然后让你找到一个不下降序列\(B\),使得这两个序列相应位置之差的平方和最小,并输出这个最小 ...

  6. POJ 2342 树的最大独立集

    题意:在树的最大独立集的基础上,加上权值.求最大. 分析: 采用刷表的方式写记忆化,考虑一个点选和不选,返回方式pair 型. 首先,无根树转有根树,dp(root). 注意的是:u不选,那么他的子节 ...

  7. 【[SCOI2010]生成字符串】

    \(n=m\)时候经典的卡特兰 那\(n!=m\)呢,还是按照卡特兰的方式来推 首先总情况数就是\(\binom{n+m}{n}\),在\(n+m\)个里选择\(n\)个\(1\) 显然有不合法的情况 ...

  8. 打开eclipse出现an error has occurred.see the loh file

    解决方案: 1,打开eclipse安装目录下的eclipse.ini文件:2,打开的文本文件最后添加一行--add-modules=ALL-SYSTEM3,保存重新打开Eclipse. 测试过已经ok

  9. 【luogu P3398 仓鼠找sugar】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3398 辣鸡树剖1300ms 倍增大法吼啊 #include <cstdio> #include ...

  10. 分享一个关于pthread线程栈在mm_struct里面的分布问题

    大家好,本人被下面这个问题困扰了一段时间,最近似乎找到了答案. 这里和大家分享一下,可能对有相同困惑的同学有点帮助,同时也请各位帮忙看看错漏的地方. 1================问题: 在使用p ...