DESCRIBEFIELD

Posted yjyongil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数