Abap 从动态指定的结构创建结构<;itab>;
在一个方法中,我引用了一个如下声明的表:Abap 从动态指定的结构创建结构<;itab>;,abap,rtts,Abap,Rtts,在一个方法中,我引用了一个如下声明的表: DATA: tabname TYPE tabname, dref TYPE REF TO data, FIELD-SYMBOLS: <itab> TYPE ANY TABLE. CREATE DATA dref TYPE TABLE OF (tabname). ASSIGN dref->* TO <itab>. SELECT * FROM (tabname) UP TO 5 ROWS INT
DATA: tabname TYPE tabname,
dref TYPE REF TO data,
FIELD-SYMBOLS: <itab> TYPE ANY TABLE.
CREATE DATA dref TYPE TABLE OF (tabname).
ASSIGN dref->* TO <itab>.
SELECT * FROM (tabname)
UP TO 5 ROWS
INTO TABLE <itab>.
DATA:tabname类型tabname,
dref类型参考数据,
字段符号:键入任何表格。
创建(tabname)的数据dref类型表。
将dref->*分配给。
从(选项卡名)中选择*
最多5行
坐到桌子上。
如何基于创建结构?您可以使用内联声明这样定义WA<代码>将表格读入()或首先使用
字段符号键入ANY
声明WA/字段符号,然后使用读取表格赋值读取表格
您可以使用内联声明这样定义WA<代码>将表格读入()或首先使用字段符号类型ANY
声明WA/字段符号,然后使用读取表格分配
1读取表格。定义任何
字段符号并使用分配
FIELD-SYMBOLS:
<line> type any.
LOOP at <itab> ASSIGNING <line>.
ENDLOOP.
1.定义一个
任何
字段符号,并使用赋值
FIELD-SYMBOLS:
<line> type any.
LOOP at <itab> ASSIGNING <line>.
ENDLOOP.
只要使用好的OLRTT就可以了。您可以创建引用并直接读入其中
FIELD-SYMBOLS: <itab> TYPE STANDARD TABLE.
DATA: ref_wa TYPE REF TO data,
ref_rowtype TYPE REF TO cl_abap_structdescr,
ref_tabletype TYPE REF TO cl_abap_tabledescr.
ref_rowtype ?= cl_abap_typedescr=>describe_by_name( tabname ).
CREATE DATA ref_wa TYPE HANDLE ref_rowtype.
READ TABLE <itab> REFERENCE INTO ref_wa INDEX 1.
字段符号:类型标准表。
数据:参考类型参考数据,
参考行类型参考到cl\U abap\U结构描述,
参考表格类型参考表格描述。
ref_rowtype?=cl_abap_typedescr=>按_名称(选项卡名称)描述_。
创建数据引用类型句柄引用行类型。
将表参考读入ref_wa索引1。
或者基于此引用创建字段符号,并在读取表中使用它
ASSIGN ref_wa->* TO FIELD-SYMBOL(<fsym_wa>).
READ TABLE <itab> ASSIGNING <fsym_wa> INDEX 1.
将ref_wa->*分配给字段-SYMBOL()。
读取分配索引1的表。
请注意,我将
声明为标准表,以消除您得到的索引错误操作
更新:要从
对象创建结构,请使用以下语法:
ref_tabletype ?= cl_abap_typedescr=>describe_by_data( <itab> ).
ref_rowtype ?= ref_tabletype->get_table_line_type( ).
ref\u tabletype?=cl\u abap\u typedescr=>description\u by\u data()。
ref\u rowtype?=ref\u tabletype->get\u table\u line\u type()。
最后两行将是相同的。只需使用好的ol'RTT即可。您可以创建引用并直接读入其中
FIELD-SYMBOLS: <itab> TYPE STANDARD TABLE.
DATA: ref_wa TYPE REF TO data,
ref_rowtype TYPE REF TO cl_abap_structdescr,
ref_tabletype TYPE REF TO cl_abap_tabledescr.
ref_rowtype ?= cl_abap_typedescr=>describe_by_name( tabname ).
CREATE DATA ref_wa TYPE HANDLE ref_rowtype.
READ TABLE <itab> REFERENCE INTO ref_wa INDEX 1.
字段符号:类型标准表。
数据:参考类型参考数据,
参考行类型参考到cl\U abap\U结构描述,
参考表格类型参考表格描述。
ref_rowtype?=cl_abap_typedescr=>按_名称(选项卡名称)描述_。
创建数据引用类型句柄引用行类型。
将表参考读入ref_wa索引1。
或者基于此引用创建字段符号,并在读取表中使用它
ASSIGN ref_wa->* TO FIELD-SYMBOL(<fsym_wa>).
READ TABLE <itab> ASSIGNING <fsym_wa> INDEX 1.
将ref_wa->*分配给字段-SYMBOL()。
读取分配索引1的表。
请注意,我将
声明为标准表,以消除您得到的索引错误操作
更新:要从
对象创建结构,请使用以下语法:
ref_tabletype ?= cl_abap_typedescr=>describe_by_data( <itab> ).
ref_rowtype ?= ref_tabletype->get_table_line_type( ).
ref\u tabletype?=cl\u abap\u typedescr=>description\u by\u data()。
ref\u rowtype?=ref\u tabletype->get\u table\u line\u type()。
最后两行将相同。读取分配索引行的表格。告诉我:不能对类型为“哈希表”或“任何表”的表使用显式或隐式索引操作。“”的类型为“ANY TABLE”。可能在“”之前未指定“表”添加项。请将表读入()索引行。给我:字段“()”未知。它既不在指定的表中,也不由“DATA”语句定义。也许是打字错误。请尝试
字段符号。将表读入,键(fld_name)=“value”。
这正是我的程序字段符号中的代码。给出错误:OO上下文中不支持非类型字段符号。使用“字段符号…键入任何”。请看一看这篇文章阅读表分配索引行。告诉我:不能对类型为“哈希表”或“任何表”的表使用显式或隐式索引操作。“”的类型为“ANY TABLE”。可能在“”之前未指定“表”添加项。请将表读入()索引行。给我:字段“()”未知。它既不在指定的表中,也不由“DATA”语句定义。也许是打字错误。请尝试字段符号。将表读入,键(fld_name)=“value”。
这正是我的程序字段符号中的代码。给出错误:OO上下文中不支持非类型字段符号。使用“字段符号…键入任何”。请看这篇文章,谢谢你的指点。但只是想掌握RTT-我可以使用这个解决方案,而不是dict对象的名称吗?谢谢你的指点。但只是想掌握RTT——我可以使用这个解决方案,而不是使用dict对象的名称吗?同意,但我不认为解决方案2对创建数据和导入(更复杂、性能更低、没有优势)感兴趣@SandraRossi solution 2展示了如何动态定义一行表的类型。这只是问题的答案之一。INTO和ASSIGNING都有自己的缺陷。同意,但我不认为解决方案2对创建数据和INTO(更复杂,性能更低,没有优势)感兴趣@SandraRossi解决方案2展示了如何动态定义一行表的类型。这只是问题的答案之一。进入和分配都有自己的陷阱。