创建动态内表的几种方法
实现原理
- 获取field catalog,调用静态类方法CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE创建
- 通过RTTS类获取到结构或表的运行时对象,通过反射机制创建
- 已知SE11结构名或表名,直接创建对应的引用变量
举两个栗子
1、反射机制
data:lr_struct type ref to data,
lr_table type REF TO data.
field-symbols:<fs_table> type any table,
<fs_struct> type any.
"RTTS
data(lo_struct) = cast cl_abap_structdescr( cl_abap_structdescr=>describe_by_name( 'TJ02T' ) ).
data(lo_table) = cl_abap_tabledescr=>create( lo_struct ).
"反射机制
create data lr_struct type handle lo_struct.
create data lr_table type handle lo_table.
"引用访问
assign lr_struct->* to <fs_struct>.
assign lr_table->* to <fs_table>.
data(lv_where) = 'SPRAS EQ 1'.
select *
from (p_tab)
into table @<fs_table>
up to 10 rows
where (lv_where) .
cl_demo_output=>display_data( <fs_table> ).
- 简略方式(通过表名直接创建动态内表)
data:ref_table type ref to data.
data:lv_where type string.
field-symbols:<fs_table> type any table.
parameters:p_tab type dd02l-tabname obligatory default 'TJ02T'.
"创建表
create data ref_table type table of (p_tab).
assign ref_table->* to <fs_table>.
lv_where = 'SPRAS EQ 1'.
select *
from (p_tab)
into table @<fs_table>
UP TO 10 ROWS
where (lv_where) .
cl_demo_output=>display_data( <fs_table> ).
备注
涉及到动态增删组件的场景,可参考我的另一篇博客
https://blog.youkuaiyun.com/u012232542/article/details/90925845