SAP ABAP动态获取动态表的结构

时间:2013-10-11 13:25:34

标签: sap abap

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

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).

如果还有其他解决方案,我会对此感到满意。

3 个答案:

答案 0 :(得分: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 =&gt; get_table_line_type开始。

答案 1 :(得分: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>.

答案 2 :(得分: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