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 | インタフェースタイプ | × | × | × | × | × |
DESCRIBEFIELD的更多相关文章
随机推荐
- 最简单的dockerfile使用教程 - 创建一个支持SSL的Nginx镜像
什么是dockerfile?简单的说就是一个文本格式的脚本文件,其内包含了一条条的指令(Instruction),每一条指令负责描述镜像的当前层(Layer)如何构建. 下面通过一个具体的例子来学习d ...
- CRM中间件里的发布-订阅者模式
从事务码SMW01里能观察到一个BDOC可能被发送往不止一个目的site去,比如下图所示的5个site都会收到该site,而高亮显示的SMOF_ERPSITE代表ERP系统QI3的client 504 ...
- ACM-ICPC(11/8)
URAL 1005 给定一些石头的重量,要求分成两个部分最相近.二进制暴力枚举. #include <bits/stdc++.h> using namespace std; ]; int ...
- Codeforces Round #443 (Div. 2)
C. Short Program Petya learned a new programming language CALPAS. A program in this language always ...
- 【luogu P1231 教辅的组成】 题解
题目链接:https://www.luogu.org/problemnew/show/P1231 对于每本书只能用一次,所以拆点再建边 #include <queue> #include ...
- mysql的子查询in()操作及按指定顺序显示
代码示例: in(逗号分隔开的值列表) 释:是否存在于值列表中 --------------------- 示例: select * from test where id in(3,1,5) orde ...
- IP检验字段为啥只检验地址部分
在首部中的错误比在数据中的错误更重 如:一个错误的地址可能导致分组被投递到错误的主机.许多主机并不检查投递给它们的分组是否 确定是要投递给它们,它们假定网络从来不会把别人的分组包传递给自己.数据不参加 ...
- cornerstone提交报错"but is missing"以及xocde提示"missing from working copy"
问题描述 xocde提示"missing from working copy" 虽然这种警告不会影响程序到运行,但是数量很多,而且在svn提交的时候回出现这种问题 使用的svn工具 ...
- Redis工具之Jedis
//jedis的连接池 public void test1(){ //创建连接池配置对象 JedisPoolConfig poolConfig = new JedisPoolConfig(); poo ...
- SmallMQ发布
最近一直学习,主要处理java的分布式,MQ,RPC,通信,数据库,缓存等方向. 一般现在的MQ都是企业级的,庞大,功能齐全.最主要是代码量大,对于我们这些小程序员而言,太大,修改困难,修复更加困难, ...