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的更多相关文章
随机推荐
- Linux中基于apache httpd的svn服务器搭建与配置
mod_dav_svn是apache连接svn的模块 yum install subversion mod_dav_svn httpd 配置文件简单说明, SVNParentPath 说明可以在指定的 ...
- 用python管理Cisco路由器
目前DevOps是整个运维发展的方向,Network的运维也一样.使用程序控制底层的路由器是最基本的要求之一. 本文简单解释如何用Python控制路由器,对网络设备进行配置. Python和网络设备连 ...
- 部署Smokeping
1.环境安装 # yum -y install gcc* perl* httpd* libxml2 libxml2-devel libpng libpng-devel glib2 glib2-deve ...
- 恢复scout工具栏
删除scout安装路径 C:\PROGRAM FILES\SIEMENS\STEP7\U7UMC\DATA\WRKBNCH 下的三个文件: acppersi.dat uespersi.dat uesu ...
- POJ-3579 Median---二分第k大(二分套二分)
题目链接: https://cn.vjudge.net/problem/POJ-3579 题目大意: 求的是一列数所有相互之间差值的序列的最中间的值是多少. 解题思路: 可以用二分套二分的方法求解第m ...
- bzoj1264 [AHOI2006]基因匹配
Description 基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而成(地球上只有4种),而更奇怪的是,组成DNA序列的每一种碱 ...
- react中性能优化的点
react提升代码性能的点 1.绑定如果改变作用域点话放在constructor里面做,这样可以保证整个程序的作用域绑定操作只会执行一次,而且避免子组件的无谓渲染. 2.内置的setState是个异步 ...
- Entity Framework 二
本篇主要介绍:创建了实体数据模型,生成了那些文件以及其代表意义 创建实体数据模型 上一篇的最后,我们创建了数据库,现在我们利用数据库来生成我们的实体数据模型,这种形式我们称为数据库优先,后面会介绍代码 ...
- triplet loss
因为待遇低,因为工作不开心,已经严重影响了自己的工作积极性和工作效率,这几天发觉这样对自己实在是一种损失,决定提高工作效率,减少工作时间. 说说最近做的tracking, multi-object t ...
- Git相关内容
先聊一点关于gitlab的内容和github的内容 Gitlab和GitHub,都是我们可以存放代码库的地方.不过Gitlab可以免费的存储私人代码,GitHub需要花钱才能够存储私人代码库,不过我想 ...