程序間獲取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就不會被顯示出來。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM