abap如何从调用其他程序,并获取到alv数据到内表

举个例子,从事务码mb52的执行ALV获取数据到一个内表

abap如何从调用其他程序,并获取到alv数据到内表


"内表定义要与程序中的内表结构一致,便于存储和输出
RANGES:matnr FOR mara-matnr.
DATA:ls_matnr LIKE LINE OF matnr.
     ls_matnr-sign   = 'I'.
     ls_matnr-option = 'CP'.
     ls_matnr-low    = '*'.
    APPEND ls_matnr TO matnr.
DATA: ls_data TYPE REF TO data.
FIELD-SYMBOLS: <lt_data> TYPE table,
               <l_data>  TYPE data.
   cl_salv_bs_runtime_info=>set(
          display  = ''
          metadata = ''
          data     = 'X'
   ).

SUBMIT  rm07mlbs                                  "使用rep静态地指定一个程序,或者使用name动态地指定
*        USING SELECTION-SCREEN '1000'             "指定要访问的选择屏幕dynnr,如不使用该条目,系统调用标准选择屏幕。
*        VIA SELECTION-SCREEN                      "显示被调用的选择屏幕。如不使用该条目,选择屏幕过程(selection screen processing)将会在后台发生。
*        USING SELECTION-SET 'TEST'                "选择屏幕使用变式
*        USING SELECTION-SETS OF PROGRAM '程序名'  "指定使用的变式的程序
*        WITH SELECTION-TABLE rspar                "选择屏幕使用内表rspar中的值,内表的行结构为RSPARAMS或者RSPARAMSL_255
WITH   nozero  = 'X'  "选择屏幕参数
WITH   pa_sond = 'X'  "选择屏幕参数
WITH   pa_flt  = 'X'  "选择屏幕参数
WITH   matnr IN matnr "选择屏幕参数
*        WITH FREE SELECTIONS texpr                "通过一个内表texpr向选择屏幕提供基于逻辑数据库的动态选择,内表texpr的类型是RSDS类型组中的RSDS_TEXPR
*        LINE-SIZE width                           "使用width设置程序访问的Basic List的行宽
*        LINE-COUNT page_lines                     "使用设置程序访问的Basic List的页包含的行数
*        EXPORTING LIST TO MEMORY                  "将程序访问的Basic List以行类型为ABAPLIST的内表形式保存到ABAP Memory中
        AND RETURN.
   TRY.
     cl_salv_bs_runtime_info=>get_data_ref(
            IMPORTING
              r_data = ls_data
     ).
     ASSIGN ls_data->* TO <lt_data>.
  CATCH cx_salv_bs_sc_runtime_info.
     MESSAGE 'UNABLE TO RETRIEVE ALV DATA' TYPE 'E'.
  ENDTRY.
   cl_salv_bs_runtime_info=>clear_all( ).
   LOOP AT <lt_data> ASSIGNING <l_data>.


  ENDLOOP.