3

我想动态获取动态表的结构。获取表格没问题,但我坚持获取表格的结构。

DATA: lo_dynamic_table TYPE REF TO data.
FIELD-SYMBOLS: <lt_table_structure> TYPE table,
                <ls_table_structure> TYPE any.

CREATE DATA lo_dynamic_table TYPE TABLE OF (lv_my_string_of_table).
ASSIGN lo_dynamic_table->* TO <lt_table_structure>.

// some code assigning the structure

现在我想执行这个命令:

SELECT SINGLE * FROM (lv_my_string_of_table) INTO <ls_table_structure> WHERE (lv_dynamid_where_field).

如果有任何其他解决方案,我会同意的。

4

3 回答 3

4

使用 RTTS。

运行时类型服务

使用此框架,您可以在运行时获得所需的类型。

http://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=42965

所需的类应该是 CL_ABAP_TABLEDESCR 甚至 CL_ABAP_DATADESCR。

他们会为你工作。

看起来,您正在获得一个 ddic 表名,并希望从表名中动态选择数据到一个通用内部表中。

因此,如果您已经获得了一个不错的 ddic 名称,那么 rtts 的使用就更加简单了。因为你有 ddic 名字。

通常还有很多功能模块(主要在命名空间前缀“RPY_*”中)。那里你肯定可以找到一个,它决定了表的结构,它是否包含包含等等。但是,首先尝试 typedescriptors,我会从 cl_abap_tabledescr=>get_table_line_type 开始。

于 2013-10-11T14:09:22.973 回答
3

此代码适用于我的情况:

DATA:   table_name type string,
        lo_dynamic_table TYPE REF TO data,
        lo_dynamic_line TYPE REF TO data.

FIELD-SYMBOLS:  <lt_table_structure> TYPE table,
                <ls_table_structure> TYPE any.

table_name = 'yourtablename'.

CREATE DATA lo_dynamic_table TYPE TABLE OF (table_name).
ASSIGN lo_dynamic_table->* TO <lt_table_structure>.

CREATE DATA lo_dynamic_line LIKE LINE OF <lt_table_structure>.
ASSIGN lo_dynamic_line->* TO <ls_table_structure>.
于 2013-10-14T14:02:58.577 回答
0

我为带有动态键的动态哈希表添加了代码。

DATA TAB_NAME LIKE SY-TNAME VALUE 'SCARR'.
DATA KEYTAB TYPE TABLE OF STRING.

DATA DREF TYPE REF TO DATA.
FIELD-SYMBOLS <F_TAB> TYPE ANY TABLE.

APPEND 'CARRID' TO KEYTAB.

CREATE DATA dref TYPE HASHED TABLE OF (TAB_NAME)
                 WITH UNIQUE KEY (KEYTAB).

ASSIGN dref->* TO <F_TAB>.
SELECT *
       FROM (TAB_NAME)
       INTO TABLE <F_TAB>.

cl_demo_output=>display( <F_TAB> ).

还要考虑链接。

https://help.sap.com/doc/saphelp_nw70/7.0.31/en-US/79/c55497b3dc11d5993800508b6b8b11/content.htm?no_cache=true

https://archive.sap.com/discussions/thread/92739

于 2019-01-22T15:20:47.533 回答