簡體   English   中英

將行添加到動態內部表

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM