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的更多相关文章
随机推荐
- 【java开发系列】—— java输入输出流
前言 任何语言输入输出流都是很重要的部分,比如从一个文件读入内容,进行分析,或者输出到另一个文件等等,都需要文件流的操作.这里简单介绍下reader,wirter,inputstream,output ...
- 找出OData service出错根源的小技巧
SAP的Fiori应用是通过OData和后台交互的.在使用Fiori应用时您可能会遇到这样的错误消息: 这个错误消息没有包含有助于partner或者客户定位问题根源的线索. 下面是如何在后台找出问题根 ...
- 关于Java中截取字符串
获取系统时间:to_char(sysdate,'yyyy-mm-dd')截取CREATETIME常量的前10位字符串:CREATETIME.substring(0,10)截取DESCRIPT常量的前2 ...
- hdu1852 Beijing 2008
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1852 题目大意: 求2008^n的所有因子和m对k取余,然后求2008^m对k取余. 解题思路: 首 ...
- Window下搭建foundation apps环境
Window下搭建foundation apps环境 框架:AngularJS.Foundation, 构建工具:Gulp, 开发环境:node.js. 操作系统:windows (一)环境准备 1 ...
- java线程池系列(1)-ThreadPoolExecutor实现原理
前言 做java开发的,一般都避免不了要面对java线程池技术,像tomcat之类的容器天然就支持多线程. 即使是做偏后端技术,如处理一些消息,执行一些计算任务,也经常需要用到线程池技术. 鉴于线程池 ...
- 原生ajax、XMLHttpRequest和FetchAPI简单描述
什么是ajax ajax的出现,刚好解决了传统方法的缺陷.AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个 ...
- 【洛谷P1966】火柴排队
火柴排队 题目链接 ∑(ai−bi)^2=∑ai^2-2*∑ai*bi+∑bi^2 显然∑ai^2+∑bi^2是不变的,我们要让 2*∑ai*bi最大,才能使原式最小 然后我们一眼就可以看出来, ...
- 关于A*估价函数的总结
估价函数的优劣决定一个A*算法的好坏 360百科上是这样说的: (https://baike.so.com/doc/6223470-6436780.html) 关于估价函数h(n)与实际距离d(n)的 ...
- Android学习笔记_72_Spinner的用法
一.普通 1. <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android= ...