3

動的内部テーブルに動的テーブル行を追加したいと考えています。

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」の追加が指定されていない可能性があります。

テーブルに行を追加するにはどうすればよいですか?

4

2 に答える 2

10

使用INSERT <ls_table> INTO TABLE <lt_table>.は正しいですが、構文エラーの理由は、フィールド シンボルを次のように定義したためです。

      <lt_table>  TYPE ANY TABLE, 

プログラムはハッシュ テーブルを使用するようにハード コードされているため、フィールド シンボルを次のように定義する必要があります。

      <lt_table>  TYPE HASHED TABLE,

これを行うことにより、構文チェッカーはテーブルの基本型を認識しているため、より優れた構文チェックを行うことができます。

構文エラーが示しているのは、append を使用すると、インデックス (標準およびソート済み) を介してアクセスできるテーブルでのみ機能し、ANY TABLEハッシュ テーブル (キーによってのみアクセス可能) である可能性があるため、追加できないことです。

于 2013-10-23T16:16:13.563 に答える