2

動的に作成された内部テーブルをメモリにエクスポートしています。

どういうわけか(別のプログラムから)それを取り戻すことが可能かどうか知りたいのですが、最初のプログラムは少なくとも私が動的にitabを作成したテーブルの名前を知っていますが、2番目のプログラムはそうではありません。

これが私のitabをエクスポートする私のコードです(これは:Pで動作します)。

parameters: pi_tbl(5) type c obligatory.    "The table name - input from the user. can be jibberish.

data: gr_tabref type ref to data.
field-symbols:<gfs_tab> type any table. 

form create_dynamic_gr_tabref .
  data: lo_struct type ref to cl_abap_structdescr,
        lo_tabref type ref to cl_abap_tabledescr.
  lo_struct ?= cl_abap_typedescr=>describe_by_name( pi_tbl ).
  try.
      call method cl_abap_tabledescr=>create
        exporting
          p_line_type  = lo_struct
        receiving
          p_result     = lo_tabref
          .
    catch cx_sy_table_creation .
      message 'Couldn''t create the table description. Quitting' type 'E'.
  endtry.
  create data gr_tabref type handle lo_tabref.

  assign gr_tabref->* to <gfs_tab>.

  select * from (pi_tbl) into table <gfs_tab> up to 200 rows.
  data: lv_memory_id(30) type c.
  lv_memory_id = 'MYMEMORYID'.

  export itab from <gfs_tab> to memory id lv_memory_id.

endform.

テーブル名のパラメータのみでデータを取り戻すことはできますか?

私が欲しいのは、ジェネリックデータ型を宣言し、それにデータを貧弱にすることです。

Object myObject; import itab to myObject memory id 'MYMEMORYID'.
4

2 に答える 2

2

最初のプログラムで置き換えます

export itab from <gfs_tab> to memory id lv_memory_id.

cl_salv_bs_runtime_info=>set(
  EXPORTING
    display        = space
    metadata       = space
    data           = 'X'
).

cl_salv_bs_runtime_info=>set_data(
  EXPORTING
    data      = <gfs_tab>
).

2番目のプログラムでは、次のようにします。

data lpt_data type ref to data.
cl_salv_bs_runtime_info=>get_data_ref(
    IMPORTING
        r_data            = lpt_data
).
于 2014-01-09T11:18:36.427 に答える
1

テーブルの場合:はい、実行できますが、実行しないでください。1つの理由は、メモリを解放するために非常に注意しない限り、ユーザーセッションがデータを持ち歩く必要があることです。別の理由は、これが一種の隠されたグローバル(クロスプログラムの場合のように)変数であり、通常は悪い考えであるということです。それを新しいプログラムに導入する。呼び出し元と呼び出されたプログラム、汎用モジュール、またはクラスの両方を制御できる場合は、データを転送するためのより良い方法があります。これは、より良いインターフェースを提供するために変更できない他のプログラムを使用する必要がある場合、または使用したい場合にのみ使用してくださいSUBMIT ... EXPORTING LIST TO MEMORY。これは、ABAPの「レガシー臭い」部分の1つであり、これは今のところ良いことですが、ほとんどの場合、なくても実行できます。

于 2012-09-06T07:29:39.700 に答える