abap如何从调用其他程序,并获取到alv数据到内表
举个例子,从事务码mb52的执行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.