如何从动态分配中声明/创建结构/ wa

时间:2018-09-03 05:39:46

标签: oop sap abap

在一个方法中,我引用了这样声明的表: 数据:标签名TYPE标签名,       dref TYPE REF TO数据, 字段符号:键入任何表。 创建数据dref类型表(选项卡名)。 ASSIGN dref-> *至。 SELECT * FROM(标签名) 最多5行 进入表。 如何创建基于的结构/ wa?

3 个答案:

答案 0 :(得分:1)

1。您定义了ANY字段符号并使用ASSIGNING

 FIELD-SYMBOLS:
      <line> type any.

 LOOP at <itab> ASSIGNING <line>.

 ENDLOOP.

2。您定义了ANY字段符号并使用INTO

 FIELD-SYMBOLS:
      <line> type any.

 CREATE DATA dref like line of <itab>.
 ASSIGN dref->* to <line>.

 LOOP at <itab> INTO <line>.

 ENDLOOP.

答案 1 :(得分:1)

为此只需使用良好的RTTS。您可以创建参考并直接阅读

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.

或基于此引用创建字段符号并在READ TABLE中使用它

ASSIGN ref_wa->*  TO FIELD-SYMBOL(<fsym_wa>).
READ TABLE <itab> ASSIGNING <fsym_wa> INDEX 1.

请注意,我已将<itab>声明为 STANDARD 表,以消除您得到的索引错误操作。

enter image description here

更新:要从<itab>对象创建结构,请使用以下语法:

ref_tabletype ?= cl_abap_typedescr=>describe_by_data( <itab> ).
ref_rowtype  ?= ref_tabletype->get_table_line_type( ).

最后两行相同。

答案 2 :(得分:0)

您可以使用内联声明来定义WA,如下所示。 READ TABLE <itab> INTO (<wa>)或先使用FIELD SYMBOL <wa> TYPE ANY声明WA / Field符号,然后使用READ TABLE <tab> ASSIGNING <wa>读取表