ABAP 跨程序获取ALV显示内容

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的情况。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值