" 隐式(dref 必须有类型,如 TYPE REF TO string) CREATE DATA dref. " 创建 STRING 类型的对象
" 显式静态 CREATE DATA dref TYPE string. " 创建 STRING
" 显式命名类型 CREATE DATA dref TYPE zmy_structure. " 创建 DDIC 结构
" 动态类型名称 DATA(lv_type) = 'STRING'. CREATE DATA dref TYPE (lv_type). " 运行时解析类型
" 表类型 CREATE DATA dref TYPE STANDARD TABLE OF string WITH EMPTY KEY.
" RTTC 句柄(最灵活) DATA(lo_elem) = cl_abap_elemdescr=>get_string( ). CREATE DATA dref TYPE HANDLE lo_elem. " 从描述符创建 STRING
访问匿名数据对象
1 2 3 4 5
FIELD-SYMBOLS: <fs> TYPE any.
CREATE DATA dref TYPE string. ASSIGN dref->* TO <fs>. <fs> = 'Dynamic content'.
⚠️始终使用 ASSIGN 访问
CREATE DATA 后,匿名数据对象只能通过数据引用访问。使用 ASSIGN dref->* TO <fs> 来操作内容。
RTTC 类型创建方法
CL_ABAP_ELEMDESCR – 基本类型
方法
创建类型
参数
GET_I()
i
无
GET_F()
f
无
GET_C( len )
c
长度
GET_STRING()
string
无
GET_X( len )
x
长度
GET_XSTRING()
xstring
无
GET_P( len decimals )
p
长度、小数位
GET_N( len )
n
长度
GET_D()
d
无
GET_T()
t
无
1 2 3
" 创建带 10 位数字和 2 位小数的压缩类型 DATA(lo_p) = cl_abap_elemdescr=>get_p( p_length = 5 p_decimals = 2 ). CREATE DATA dref TYPE HANDLE lo_p.
CL_ABAP_STRUCTDESCR – 结构类型
从组件列表创建结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
DATA: lt_comp TYPE cl_abap_structdescr=>component_table. DATA: lo_struct TYPE REF TO cl_abap_structdescr.
" 构建组件表 APPEND VALUE #( name = 'ID' type = cl_abap_elemdescr=>get_i( ) ) TO lt_comp. APPEND VALUE #( name = 'NAME' type = cl_abap_elemdescr=>get_string( ) ) TO lt_comp. APPEND VALUE #( name = 'AMT' type = cl_abap_elemdescr=>get_p( p_length = 8 p_decimals = 2 ) ) TO lt_comp.
DDIC / 已有类型 | v describe_by_name() 或 describe_by_data() | v 行类型描述符 (CL_ABAP_STRUCTDESCR) | v CL_ABAP_TABLEDESCR=>create( line_type, key, ... ) | v 表类型描述符 (CL_ABAP_TABLEDESCR) | v CREATE DATA dref TYPE HANDLE <descriptor> | v ASSIGN dref->* TO <ft> | v 像普通内表一样使用 <ft>