获取 itab 的 table 结构失败
Getting table structure of itab fails
我目前正在开展一个项目,将数据提取到多个 itab 中,并将它们全部保存到我本地电脑上的单个 excel 文件中。
为了将我的数据移动到 excel 文件中,我必须遍历似乎可以使用 cl_abap_structdescr=>describe_by_data
和 cl_abap_tabledescr=>create
函数存档的表格字段。在我读到的 original article 中,作者将它们与 ABAP 词典 table 一起使用,我的目标是将其与任意内部 table 一起使用。
我在测试报告中试过,用T005测试:
data:
lt_t005 type standard table of t005,
ls_t005 like line of lt_t005,
tablestructure type ref to cl_abap_structdescr,
tabletype type ref to cl_abap_tabledescr.
*tablestructure ?= cl_abap_structdescr=>describe_by_name( 'lt_t005' ).
tablestructure ?= cl_abap_structdescr=>describe_by_data( lt_t005 ).
tabletype ?= cl_abap_tabledescr=>create( p_line_type = tablestructure ).
describe_by_name()
和 describe_by_data()
都不起作用,按名称描述会导致“NOT_FOUND”异常。因为它不是 ABAP 词典 Table 这对我来说有点有意义。按数据描述导致 CX_SY_MOVE_CAST_ERROR
告诉我源类型 \CLASS=CL_ABAP_TABLEDESC
无法转换为 "\CLASS=CL_ABAP_STRUCTDESC
.
提前致谢
使用这个变体:
tablestructure ?= cl_abap_structdescr=>describe_by_data( ls_t005 ).
tabletype ?= cl_abap_tabledescr=>create( p_line_type = tablestructure ).
DATA table TYPE REF TO data.
FIELD-SYMBOLS: <tab> TYPE ANY TABLE.
CREATE DATA table TYPE HANDLE tabletype.
ASSIGN table->* TO <tab>.
SELECT *
FROM t005
INTO TABLE <tab>.
注意第一行与你的不同,describe_by_data
方法接受平面结构,而不是 itab。
这里是所有 RTTS 对象及其可用方法的good overview。
您正在尝试使用 class cl_abap_structdescr
创建 table 描述。这是行不通的,因为 class 是针对结构的,而不是针对 tables.
如果您需要 table 说明,请使用 class cl_abap_tabledescr
。
tabletype ?= cl_abap_tabledescr=>describe_by_data( lt_t005 ).
当你还需要所述table行的结构描述时,可以通过table描述获取:
tablestructure ?= tabletype->get_table_line_type( ).
请注意,如果内部 table 的行类型不是结构(如 TYPE TABLE OF string
),最后一行将抛出 CX_SY_MOVE_CAST_ERROR
异常。
我目前正在开展一个项目,将数据提取到多个 itab 中,并将它们全部保存到我本地电脑上的单个 excel 文件中。
为了将我的数据移动到 excel 文件中,我必须遍历似乎可以使用 cl_abap_structdescr=>describe_by_data
和 cl_abap_tabledescr=>create
函数存档的表格字段。在我读到的 original article 中,作者将它们与 ABAP 词典 table 一起使用,我的目标是将其与任意内部 table 一起使用。
我在测试报告中试过,用T005测试:
data:
lt_t005 type standard table of t005,
ls_t005 like line of lt_t005,
tablestructure type ref to cl_abap_structdescr,
tabletype type ref to cl_abap_tabledescr.
*tablestructure ?= cl_abap_structdescr=>describe_by_name( 'lt_t005' ).
tablestructure ?= cl_abap_structdescr=>describe_by_data( lt_t005 ).
tabletype ?= cl_abap_tabledescr=>create( p_line_type = tablestructure ).
describe_by_name()
和 describe_by_data()
都不起作用,按名称描述会导致“NOT_FOUND”异常。因为它不是 ABAP 词典 Table 这对我来说有点有意义。按数据描述导致 CX_SY_MOVE_CAST_ERROR
告诉我源类型 \CLASS=CL_ABAP_TABLEDESC
无法转换为 "\CLASS=CL_ABAP_STRUCTDESC
.
提前致谢
使用这个变体:
tablestructure ?= cl_abap_structdescr=>describe_by_data( ls_t005 ).
tabletype ?= cl_abap_tabledescr=>create( p_line_type = tablestructure ).
DATA table TYPE REF TO data.
FIELD-SYMBOLS: <tab> TYPE ANY TABLE.
CREATE DATA table TYPE HANDLE tabletype.
ASSIGN table->* TO <tab>.
SELECT *
FROM t005
INTO TABLE <tab>.
注意第一行与你的不同,describe_by_data
方法接受平面结构,而不是 itab。
这里是所有 RTTS 对象及其可用方法的good overview。
您正在尝试使用 class cl_abap_structdescr
创建 table 描述。这是行不通的,因为 class 是针对结构的,而不是针对 tables.
如果您需要 table 说明,请使用 class cl_abap_tabledescr
。
tabletype ?= cl_abap_tabledescr=>describe_by_data( lt_t005 ).
当你还需要所述table行的结构描述时,可以通过table描述获取:
tablestructure ?= tabletype->get_table_line_type( ).
请注意,如果内部 table 的行类型不是结构(如 TYPE TABLE OF string
),最后一行将抛出 CX_SY_MOVE_CAST_ERROR
异常。