【转载】程序间获取ALV显示数据(读取ALV GRID上的数据)

程序间获取ALV数据的两种方法:
方法1:通过修改SUBMIT的目标程序,把内表EXPORT到内存,SUBMIT后IMPORT ,该方法需要修改目标程序,可以任意设置目标程序的中断点;
复制代码

  • Execute transaction IA09 to get all Functional Location Tasklists
    SUBMIT riplko10
    WITH SELECTION-TABLE lt_selscreen
    WITH pn_iflo = abap_true "Select Func Loc Tasklists
    WITH dy_tcode = ‘IA09’
    WITH dy_selm = ‘D’ "Dark mode
    AND RETURN
    IMPORT sel_tab FROM MEMORY ID ‘RIPLKO10’.
    复制代码
    这种方法性能比较高但是依赖源程序,需要事先将需要的数据EXPORT到内存,如果是标准程序就需要做增强。

方法2:SUBMIT前屏蔽ALV GRID的显示,使用SUBMIT,然后调用CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF方法获取数据(包括显示数据,布局数据,字段数据,过滤器等),这个是SAP提供的API所以我们不关心如何存储所以该方法不需要修改目标程序就可以直接得到ALV显示的结果,但不能设置目标程序的中断点,需显示ALV的函数执行完毕方可获取到数据。
复制代码
FIELD-SYMBOLS <lt_pay_data> TYPE ANY TABLE.
DATA lr_pay_data TYPE REF TO data.
DATA lt_selscreen TYPE TABLE OF rsparams.

"初始设置
CALL METHOD cl_salv_bs_runtime_info=>set
EXPORTING
display = abap_false
metadata = abap_false
data = abap_true.

CLEAR lr_alv_data.
UNASSIGN <lt_alv_data>

  • 调用目标程序
    SUBMIT rm07mlbs
    WITH matnr IN s_matnr
    WITH werks IN s_werks
    WITH charg IN s_charg
    WITH lgort IN s_lgort
    WITH matart IN s_mtart
    WITH negativ = space
    WITH xmchb = abap_on
    WITH nozero = abap_on
    WITH novalues = space
  • EXPORTING LIST TO MEMORY
  • VIA SELECTION-SCREEN
    AND RETURN.

TRY.
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_alv_data ).
ASSIGN lr_alv_data->* TO <lt_alv_data>.
CATCH cx_salv_bs_sc_runtime_info.
MESSAGE 'Unable to retrieve ALV data! ’ TYPE ‘S’ DISPLAY LIKE ‘E’.
LEAVE LIST-PROCESSING.
ENDTRY.

cl_salv_bs_runtime_info=>clear_all( ).
"
REFRESH: bestand.
IF <lt_alv_data> IS ASSIGNED.
bestand[] = <lt_alv_data>.
ENDIF.
复制代码
CL_SALV_BS_RUNTIME_INFO与读取ALV有关的方法:

SET() - 此方法初始化类(清除内存区域),然后允许标志的设置让任何后续ALV对象如何工作。它应该在装程序调用ALV报告程序之前被调用。
参数:

DISPLAY - 将它设为abap_false强制所有后续ALV报告在“黑暗模式”下运行,也就是说,ALV不会被输出到GUI。
METADATA - 将它设为abap_false防止基本信息(布局,字段目录等)被取到内存中…一般我们不需要。
DATA - 将它设为abap_true迫使数据表导出到内存而不是显示报表。
GET_DATA_REF() - 非常灵活的GET_DATA*方法,这种方法可以用来访问该数据表变量的引用(动态而且易用),所以即使不知道ALV数据表的结构也没关系。
参数:

R_DATA - 输出ALV数据表。
R_DATA_LINE - 如果执行的ALV有HEADER的(可选)。
GET_DATA() - 如果知道需要调用的ALV数据表的结构,可以使用这个方法。
参数:

T_DATA - 输出参数数据表。
T_DATA_LINE - 如果执行的ALV有HEADER(可选)。
CLEAR_ALL() - 此方法清除在set()方法设置的标志。如果之后本程序还需要显示其他ALV 那么这个方法尤为重要。如果不清除设置,你的ALV就不会被显示出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值