业务需求:
在SAP项目中,会经常碰到如下需求:
1:当前SAP系统中存在现有的功能程序A(取数逻辑较为复杂)。
2:功能程序B中需要使用功能程序A的ALV显示列表的数据(取数逻辑完全一致)。
具体实现步骤:
一、功能程序A启动SAP运行时数据跟踪。
调用类CL_SALV_BS_RUNTIME_INFO函数SET;设置数据显示模式为NO-DISPLAY,数据返回为TRUE,如下图:
二、SUBMIT调用功能程序A。
在功能程序B中通过submit调用工程程序A,如下图:
三、获取跟踪数据。
在功能程序B中,通过调用类CL_SALV_BS_RUNTIME_INFO函数GET_DATA_REF,获取跟踪到的数据,如下图:
四、完整代码如下:
*&---------------------------------------------------------------------*
*& 定义-变量
*&---------------------------------------------------------------------*
FIELD-SYMBOLS: <LT_DATA_RETURN> TYPE TABLE,
<LS_DATA_RETURN> TYPE ANY,
<LF_VALUE> TYPE ANY.
DATA: LS_DATA_RETURN TYPE REF TO DATA,
L_MESSAGE TYPE STRING,
LO_EXREF TYPE REF TO CX_ROOT.
*&---------------------------------------------------------------------*
*& 功能处理-通过submit的方式获取源程序ALV显示数据
*&---------------------------------------------------------------------*
**启用跟踪类
CL_SALV_BS_RUNTIME_INFO=>SET( DISPLAY = ABAP_FALSE
METADATA = ABAP_FALSE
DATA = ABAP_TRUE ).
*SUBMIT调用目标程序,获取ALV清单
SUBMIT ZFICORP001 WITH S_WERKS IN R_WERKS
WITH S_MATNR IN R_MATNR
AND RETURN.
TRY.
CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF( IMPORTING R_DATA = LS_DATA_RETURN ).
IF SY-SUBRC = 0.
******获取数据成功,整合数据
ASSIGN LS_DATA_RETURN->* TO <LT_DATA_RETURN>.
LOOP AT <LT_DATA_RETURN> ASSIGNING <LS_DATA_RETURN>.
ENDLOOP.
ENDIF.
**捕捉异常
CATCH CX_SALV_BS_SC_RUNTIME_INFO INTO LO_EXREF.
L_MESSAGE = LO_EXREF->GET_TEXT( ).
ENDTRY.
**清空捕捉信息
CL_SALV_BS_RUNTIME_INFO=>CLEAR_ALL( ).