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

来源:互联网 发布:java泛型类 继承 调用 编辑:程序博客网 时间:2024/05/18 00:16
程序间获取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.* 调用目标程序  SUBMIT h99cwtr0    WITH SELECTION-TABLE lt_selscreen     AND RETURN.  TRY.      "获取ALV显示数据      CALL METHOD cl_salv_bs_runtime_info=>get_data_ref        IMPORTING          r_data = lr_pay_data.      ASSIGN lr_pay_data->* TO <lt_pay_data>.    CATCH cx_salv_bs_sc_runtime_info.      MESSAGE `无法取得ALV术` TYPE 'E'.  ENDTRY.  "结束  cl_salv_bs_runtime_info=>clear_all( ).
复制代码

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就不会被显示出来。

原创粉丝点击