创建动态内表的几种方法
实现原理
- 通过函数或者RTTS获取到结构的组件信息,然后利用cl_alv_table_create实现
- 通过RTTS获取到结构的OO描述对象,通过反射机制获得内表引用
- 已知结构或表名,通过引用变量直接定义
备注:
RTTS可以通过已有变量或者结构名获取对应的组件信息
通过内嵌声明(inline declaration)可以节省大量代码
可以通过增删组件实现动态内表的定制
举两个栗子
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( p_tab ) ).
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> ).