2

我正在将动态创建的内部表导出到内存。

我想知道是否有可能以某种方式(从另一个程序)取回它,此外,虽然第一个程序至少知道我从中动态创建 itab 的表的名称,但第二个程序不知道.

这是导出我的 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>
).

在第二个程序中这样做:

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

对于表格:是的,可以这样做,但不应该这样做。一个原因是除非您非常小心地释放内存,否则用户会话将不得不携带数据,另一个原因是这是一种隐藏的全局(如跨程序)变量,这通常是一个坏主意将其引入新程序。如果您对调用者和被调用程序、功能模块或类都有控制权,则有更好的方法来传输数据。仅当您必须/想要使用一些您无法更改以提供更好界面的其他程序时才使用此选项 - 或者在某些特殊情况下,例如SUBMIT ... EXPORTING LIST TO MEMORY. 这是 ABAP 的“遗留气味”部分之一,它现在很好,但在大多数情况下你可以不用它。

于 2012-09-06T07:29:39.700 回答