[英]Add line to dynamic internal table
我想将动态表行添加到动态内部表。
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>.
最后一行是问题。 我收到此语法错误:
不能对类型为“HASHED TABLE”或“ANY TABLE”的表使用显式或隐式索引操作。 “<LT_TABLE>”的类型为“ANY TABLE”。 可能在“<LT_TABLE>”之前未指定“TABLE”添加。
我应该如何在表格中添加一行?
使用INSERT <ls_table> INTO TABLE <lt_table>.
是正确的,但语法错误的原因是您将字段符号定义为:
<lt_table> TYPE ANY TABLE,
由于您的程序被硬编码为使用哈希表,因此您应该将字段符号定义为
<lt_table> TYPE HASHED TABLE,
通过这样做,语法检查器可以为您提供更好的语法检查,因为它知道表的基本类型。
语法错误告诉您的是,使用 append 仅适用于可通过索引(标准和排序)访问的表,并且由于ANY TABLE
可能是哈希表(只能通过键访问),因此您无法附加到它。
使用INSERT
操作:
INSERT <ls_table> INTO TABLE <lt_table>.
我希望你知道你在做什么。 有了所有这些通用数据处理,我怀疑任何人都能够理解您到底要解决什么问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.