[英]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.