DESCRIBEFIELD
2024-10-20 08:55:26
実行時データ型識別、略語は 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 | インタフェースタイプ | × | × | × | × | × |
最新文章
- JavaScript面向对象之我见
- Bootstrap<;基础十五>; 输入框组
- java 删除目录、 文件
- 迅为顶级四核开发板 Exynos4412开发板,仅售560元
- 暴雪游戏-守望先锋-FPS
- C函数及指针学习1
- POJ C程序设计进阶 编程题#3:运算符判定
- Transform DataGrid 套用格式
- Android_常用控件及适配器
- [php基础]记录PHP错误日志 display_errors与log_errors的区别
- Chapter 4: Spring and AOP:Spring's AOP Framework -- draft
- EF6.0 自定义Code First约定
- Sass学习笔记(补充)
- jquery 清空、添加、删除select
- 【vue】vue中引入jquery
- k8s系列~docker mysql
- I/O Planning
- 让thinkphp 支持ftp上传到远程,ftp删除
- vlc相关命令行设置
- MySQL中的各种引擎