実行時データ型識別、略語は 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. android中View点击和触摸事件的处理

    android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN-& ...

  2. delete在js里为引用删除

    delete 运算符从对象中删除一个属性,或从数组中删除一个元素. delete expressionexpression 参数是一个有效的 JScript 表达式,通常是一个属性名或数组元素. 说明 ...

  3. intelli j中如何重启tomcat,或者关掉tomcat?每次点run都提示jmx端口占用

    方法1.idea有时候会这样,我一般都是直接打开任务管理器,把java进程给杀掉就好了.

  4. 【luogu P2936 [USACO09JAN]全流Total Flow】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2936 菜 #include <queue> #include <cstdio> #i ...

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

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

  6. 【luogu P3366 最小生成树】 模板

    这里是kruskal做法 当然prim也可以,至于prim和kruskal的比较: Prim在稠密图中比Kruskal优,Kruskal在稀疏图中比Prim优. #include<bits/st ...

  7. 复合词(Compound Words, UVa 10391)(stl set)

    You are to find all the two-word compound words in a dictionary. A two-word compound word is a word i ...

  8. Windows下安装PCL点云库

    原文链接:http://blog.csdn.net/u012337034/article/details/38270109 简介:         在Windows下安装PCL点云库的方法大概有两种: ...

  9. CentOS 7 下 Oracle 11g 安装教程

    一.准备工作 1.关闭selinux   查看selinux状态:   getenforce或者sestatus -v   临时关闭:   setenforce 0   永久关闭:   vim /et ...

  10. Oracle中with关键字的使用

    open p_cr1 for with sqla as (select d.*, (select c.STATICMONTH from ly_zg_jzfbtstatic c where c.ID = ...