ALV 调用标准程序并获取结果

本文介绍了在不改变目标程序的前提下,通过修改SUBMIT目标程序和使用CL_SALV_BS_RUNTIME_INFO获取ALV数据的两种方法。方法1需要修改目标程序以设置中断点,而方法2则无需修改,但获取数据时需等待ALV显示完毕。
摘要由CSDN通过智能技术生成

程序间获取ALV数据的两种方法:

方法1:通过修改SUBMIT的目标程序,把内表EXPORT到内存,SUBMIT后IMPORT ,该方法需要修改目标程序,可以任意设置目标程序的中断点;

方法2: SUBMIT前屏蔽ALV GRID的显示,SUBMIT,然后调用 CL_SALV_BS_RUNTIME_INFO => GET_DATA_REF方法 获取数据, 该方法 不需要修改目标程序,但不能 设置目标程序的中断点,需显示ALV的函数执行完毕方可获取到数据。

实例:
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 .

————————————————

ALV 调用标准程序并获取结果_cl_salv_bs_runtime_info=>get_data_ref-CSDN博客

导语:最近需求需要获取一个函数的结果,但是这个结果是ALV显示的,但是只需要他的数据,不需要他的展示。

需求:获取到函数【K_KKB_KKBCS_ORDER_REPORT】的ALV输出内表得值。

实现方法:
调用 cl_salv_bs_runtime_info=>get_data_ref
这里以带有ALV的函数为例,也可以直接通过SUBMIT来获取标准程序的内表

说明:如果A程序中SUBMIT一个程序,B程序再继续用上面的方法SUBMIT是不支持的,可以通过程序间调用FORM实现。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 首先,在ALV程序里面定义一个新的按钮,用于触发打印操作。 2. 在按钮的事件处理中,调用函数 module_name = 'SSF_FUNCTION_MODULE_NAME',获取Smartform的函数模块名。 3. 然后,通过函数 module_name = 'SSF_FUNCTION_MODULE_NAME' 获取的函数模块名,调用函数 module_name,传入需要打印的数据。 4. 最后,调用函数 'SSF_FUNCTION_MODULE_NAME',传入Smartform的函数模块名和需要打印的数据,即可完成打印操作。 以下是示例代码: 1. 定义按钮 DATA: ok_code TYPE sy-ucomm. CASE ok_code. WHEN 'PRINT'. lv_layout-info_fname = 'ZALV_SMARTFORM'. CALL METHOD cl_gui_alv_grid=>get_selected_rows RECEIVING value = lt_sel. LOOP AT lt_sel INTO ls_sel. READ TABLE gt_outtab INTO ls_outtab INDEX ls_sel-index. APPEND ls_outtab TO lt_print. ENDLOOP. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = lv_layout-info_fname IMPORTING fm_name = lv_fm_name. CALL FUNCTION lv_fm_name EXPORTING control_parameters = gt_cparams output_options = gt_oparams user_settings = gt_usparams TABLES t_outtab = lt_print. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = lv_layout-info_fname IMPORTING fm_name = lv_fm_name EXCEPTIONS no_form = 1 no_function_module = 2 others = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. CALL FUNCTION lv_fm_name EXPORTING control_parameters = gt_cparams output_options = gt_oparams user_settings = gt_usparams TABLES t_outtab = lt_print. ENDIF. ENDCASE.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值