1.
通过使用EXPORT IMPORT的方式获取,但这样会有个弊端,当EXPORT中的表参数结构发生改变的时候,所有IMPORT到的程序都需要更改接收的结构。
ALV输出程序中添加语句:
EXPORT A = GT_ITAB TO MEMORY ID 'TABLE'.
需要获取数据程序添加语句:
先SUBMIT ALV输出程序,
SUBMIT TCODE WITH SELECTION AND RETURN.
IMPORT A = GT_ITAB FROM MEMORY ID 'TABLE'.
2.
通过函数直接读取ABAP缓存中数据。
A程序不需要增加语句;
B程序在SUBMIT A程序的时候:
SUBMIT A程序 WITH SELECTION EXPORTING LIST TO MEMORY AND RETURN.
DATA: LIST_TAB LIKE ABAPLIST OCCURS 100 WITH HEADER LINE.
DATA: BEGIN OF LT_LIST OCCURS 0,
ROW(800) TYPE C,
END OF LT_LIST.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
LISTOBJECT = LIST_TAB
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF NOT LIST_TAB[] IS INITIAL.
CALL FUNCTION 'LIST_TO_ASCI'
TABLES
LISTASCI = LT_LIST
LISTOBJECT = LIST_TAB
EXCEPTIONS
EMPTY_LIST = 1
LIST_INDEX_INVALID = 2
OTHERS = 3.
ENDIF.
3.
个人推荐的一种使用方式。该种使用方式,A程序结构发生改变的时候,不会造成B程序ABAP DUMP,且可以灵活获取到对应输出ALV中的某一个字段值。不过无法获取内表中嵌套的表数据。
DATA:LS_DATA TYPE REF TO DATA.
FIELD-SYMBOLS: <LT_DATA> TYPE TABLE,
<FS_DATA> TYPE DATA.
SUBMIT TCODE WITH SELECTION 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( ).
IF <LT_DATA> IS NOT ASSIGNED.
RAISE NO_MORE_DATA.
ENDIF.
LOOP AT <LT_DATA> ASSIGNING <FS_DATA>.
MOVE-CORRESPONDING <FS_DATA> TO E_T_DATA.
ASSIGN COMPONENT FIELDNAME OF STRUCTURE <FS_DATA> TO <FS_FIELD>.
ENDLOOP.
上述获取方式都是同SESSION的情况。