Abap 将行添加到动态内部表

Abap 将行添加到动态内部表,abap,internal-tables,rtts,Abap,Internal Tables,Rtts,我想将动态表行添加到动态内部表中 DATA: lo_structdescr TYPE REF TO cl_abap_structdescr, lo_tabledescr TYPE REF TO cl_abap_tabledescr, lt_components TYPE abap_component_tab, ls_component TYPE LINE OF abap_component_tab, lt_keys

我想将动态表行添加到动态内部表中

DATA: lo_structdescr    TYPE REF TO cl_abap_structdescr,
      lo_tabledescr     TYPE REF TO cl_abap_tabledescr,
      lt_components     TYPE abap_component_tab,
      ls_component      TYPE LINE OF abap_component_tab,
      lt_keys           TYPE abap_keydescr_tab,
      lt_table          TYPE REF TO data,
      ls_table          TYPE REF TO data.

FIELD-SYMBOLS: <ls_table>  TYPE any,
               <lt_table>  TYPE ANY TABLE,
               <lv_value> TYPE any.


MOVE 'COMP1' TO ls_component-name.
ls_component-type ?= cl_abap_elemdescr=>get_string( ).
INSERT ls_component INTO TABLE lt_components.

MOVE 'COMP2' TO ls_component-name.
ls_component-type ?= cl_abap_elemdescr=>get_i( ).
INSERT ls_component INTO TABLE lt_components.

lo_structdescr ?= cl_abap_structdescr=>create( lt_components ).

CREATE DATA ls_table TYPE HANDLE lo_structdescr.
ASSIGN ls_table->* TO <ls_table>.

lo_tabledescr ?= cl_abap_tabledescr=>create( p_line_type  = lo_structdescr
                                             p_table_kind = cl_abap_tabledescr=>tablekind_hashed
                                             p_unique     = abap_true
                                             p_key        = lt_keys
                                             p_key_kind   = cl_abap_tabledescr=>keydefkind_default ).

CREATE DATA lt_table TYPE HANDLE lo_tabledescr.
ASSIGN lt_table->* TO <lt_table>.


ASSIGN COMPONENT 'COMP1' OF STRUCTURE <ls_table> TO <lv_value>.
<lv_value> = 'test'.

APPEND <ls_table> TO <lt_table>.
DATA:lo_structdescr TYPE REF TO cl_abap_structdescr,
lo_tabledescr类型参考cl_abap_tabledescr,
lt_组件类型abap_组件选项卡,
abap\U组件选项卡的ls\U组件类型行,
lt_键类型abap_键描述选项卡,
lt_表类型参考数据,
ls_表类型引用到数据。
字段符号:键入任意,
键入任何表格,
键入任何。
将“COMP1”移动到ls\U组件名称。
ls\u component-type?=cl\u abap\u elemdescr=>get\u string()。
将ls\U组件插入表lt\U组件。
将“COMP2”移动到ls\U组件名称。
ls\u component-type?=cl\u abap\u elemdescr=>get\u i()。
将ls\U组件插入表lt\U组件。
lo_structdescr?=cl_abap_structdescr=>create(lt_组件)。
创建数据ls_表类型句柄lo_structdescr。
将ls_表->*分配给。
lo_tabledescr?=cl_abap_tabledescr=>create(p_line_type=lo_structdescr
p_table_kind=cl_abap_tabledescr=>tablekind_hash
p_unique=abap_true
p_键=lt_键
p_key_kind=cl_abap_tabledescr=>keydefkind_默认值)。
创建数据lt_表类型句柄lo_tabledescr。
将lt_表->*分配给。
将结构的组件“COMP1”分配给。
='测试'。
附加到。
最后一行是问题。我发现这个语法错误:

不能对具有的表使用显式或隐式索引操作 输入“哈希表”或“任意表”。“”的类型为“ANY” 表”。可能未指定“表格”添加项 在“”之前


如何向表中添加行?

使用
INSERT
操作:

INSERT <ls_table> INTO TABLE <lt_table>.
插入到表中。
我希望你知道你在做什么。使用所有这些通用数据处理,我怀疑任何人都无法理解您试图解决的问题。

使用
插入到表中。
是正确的,但语法错误的原因是您将字段符号定义为:

      <lt_table>  TYPE ANY TABLE, 
键入任何表格,
因为您的程序是硬编码的,使用哈希表,所以您应该将字段符号定义为

      <lt_table>  TYPE HASHED TABLE,
输入哈希表,
通过这样做,语法检查器可以为您提供更好的语法检查,因为它知道表的基本类型


语法错误告诉您的是,使用append只能处理可通过索引(标准和排序)访问的表,并且由于
任何表
都可能是哈希表(只能通过键访问),因此您无法将其追加到该表。

他们要求我超级动态地执行此操作。所以他们会得到的。再次感谢。