程序间获取ALV数据的两种方法:
方法1:通过修改SUBMIT的目标程序,把内表EXPORT到内存,SUBMIT后IMPORT ,该方法需要修改目标程序,可以任意设置目标程序的中断点;
方法2: SUBMIT前屏蔽ALV GRID的显示,SUBMIT,然后调用 CL_SALV_BS_RUNTIME_INFO => GET_DATA_REF方法 获取数据, 该方法 不需要修改目标程序,但不能 设置目标程序的中断点,需显示ALV的函数执行完毕方可获取到数据。
示例:
代码语言:javascript复制START-OF-SELECTION .
PERFORM GET_DATA .
*&———————————————————————*
*& Form GET_DATA
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM GET_DATA .
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 ZMMR009 WITH ZBUDAT IN ZBUDAT 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> .
MOVE-CORRESPONDING <L_DATA> TO GT_TAB .
APPEND GT_TAB .
ENDLOOP .
ENDFORM .