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展示了如何动态定义一行表的类型。这只是问题的答案之一。进入和分配都有自己的陷阱。