从动态分配的 <itab> 创建结构
Create a structure from a dynamically assigned <itab>
在一个方法中,我引用了一个 table 声明如下:
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>.
如何创建基于的结构?
你可以像这样使用内联声明来定义WA。 READ TABLE <itab> INTO (<wa>)
或首先使用 FIELD SYMBOL <wa> TYPE ANY
声明 WA/Field 符号,然后使用 READ TABLE <tab> ASSIGNING <wa>
读取 table
1.You 定义一个 ANY
字段符号并使用 ASSIGNING
FIELD-SYMBOLS:
<line> type any.
LOOP at <itab> ASSIGNING <line>.
ENDLOOP.
2.You 定义一个 ANY
字段符号并使用 INTO
FIELD-SYMBOLS:
<line> type any.
CREATE DATA dref like line of <itab>.
ASSIGN dref->* to <line>.
LOOP at <itab> INTO <line>.
ENDLOOP.
为此使用好的 ol' 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 table 以消除您遇到的索引错误操作。
UPDATE:要从 <itab>
对象创建结构,请使用此语法:
ref_tabletype ?= cl_abap_typedescr=>describe_by_data( <itab> ).
ref_rowtype ?= ref_tabletype->get_table_line_type( ).
最后两行完全相同。
在一个方法中,我引用了一个 table 声明如下:
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>.
如何创建基于的结构?
你可以像这样使用内联声明来定义WA。 READ TABLE <itab> INTO (<wa>)
或首先使用 FIELD SYMBOL <wa> TYPE ANY
声明 WA/Field 符号,然后使用 READ TABLE <tab> ASSIGNING <wa>
1.You 定义一个 ANY
字段符号并使用 ASSIGNING
FIELD-SYMBOLS:
<line> type any.
LOOP at <itab> ASSIGNING <line>.
ENDLOOP.
2.You 定义一个 ANY
字段符号并使用 INTO
FIELD-SYMBOLS:
<line> type any.
CREATE DATA dref like line of <itab>.
ASSIGN dref->* to <line>.
LOOP at <itab> INTO <line>.
ENDLOOP.
为此使用好的 ol' 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 table 以消除您遇到的索引错误操作。
UPDATE:要从 <itab>
对象创建结构,请使用此语法:
ref_tabletype ?= cl_abap_typedescr=>describe_by_data( <itab> ).
ref_rowtype ?= ref_tabletype->get_table_line_type( ).
最后两行完全相同。