ABAP动态内表三种实现方法

创建动态内表的几种方法

实现原理

  1. 获取field catalog,调用静态类方法CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE创建
  2. 通过RTTS类获取到结构或表的运行时对象,通过反射机制创建
  3. 已知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> ).
  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> ).

备注

涉及到动态增删组件的场景,可参考我的另一篇博客
https://blog.youkuaiyun.com/u012232542/article/details/90925845

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值