ABAP动态内表

创建动态内表的几种方法

实现原理

  1. 通过函数或者RTTS获取到结构的组件信息,然后利用cl_alv_table_create实现
  2. 通过RTTS获取到结构的OO描述对象,通过反射机制获得内表引用
  3. 已知结构或表名,通过引用变量直接定义
    备注
    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> ).
  1. 简略方式
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> ).

猜你喜欢

转载自blog.csdn.net/u012232542/article/details/92799641