• 程序间获取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.
    
    * 调用目标程序
      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就不会被显示出来。

  • 相关阅读:
    最牛B的编码套路
    查看端口号
    一个电脑 两个显示屏
    如何修改报表平台中数据决策系统登陆地址
    MTK+Android编译
    报表参数控件和报表内容自动居中设置方法
    如何把报表放到网页中显示(Web页面与报表简单集成例子)
    报表与微信公众号(企业号)集成方案
    在开发过程中调试报表插件详细教程
    电量检测芯片BQ27510使用心得
  • 原文地址:https://www.cnblogs.com/dy-debug/p/5791534.html
Copyright © 2020-2023  润新知