程序间获取ALV显示数据(读取ALV GRID上的数据)

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

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

* Execute transaction IA09 to get all Functional Location Tasklists
  SUBMIT riplko10
    WITH SELECTION-TABLE lt_selscreen
    WITH pn_iflo  = abap_true  "Select Func Loc Tasklists
    WITH dy_tcode = ‘IA09‘
    WITH dy_selm  = ‘D‘        "Dark mode
    AND RETURN
  IMPORT sel_tab FROM MEMORY ID ‘RIPLKO10‘.

这种方法性能比较高但是依赖源程序,需要事先将需要的数据EXPORT到内存,如果是标准程序就需要增强开发。

方法2:SUBMIT前屏蔽ALV GRID的显示,SUBMIT,然后调用CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF方法获取数据(包括显示数据,布局数据,字段数据,过滤器等),这个是SAP提供的API所以我们不关心如果存储所以该方法不需要修改目标程序就可以直接得到ALV显示的结果,但不能设置目标程序的中断点,需显示ALV的函数执行完毕方可获取到数据。

  FIELD-SYMBOLS <lt_pay_data>   TYPE ANY TABLE.
  DATA lr_pay_data              TYPE REF TO data.
  DATA lt_selscreen             TYPE TABLE OF rsparams.

  "初始设置
  CALL METHOD cl_salv_bs_runtime_info=>set
    EXPORTING
      display  = abap_false
      metadata = abap_false
      data     = abap_true.

* 调用目标程序
  SUBMIT h99cwtr0
    WITH SELECTION-TABLE lt_selscreen
     AND RETURN.

  TRY.

      "获取ALV显示数据
      CALL METHOD cl_salv_bs_runtime_info=>get_data_ref
        IMPORTING
          r_data = lr_pay_data.

      ASSIGN lr_pay_data->* TO <lt_pay_data>.
    CATCH cx_salv_bs_sc_runtime_info.

      MESSAGE `无法取得ALV术` TYPE ‘E‘.
  ENDTRY.

  "结束
  cl_salv_bs_runtime_info=>clear_all( ).

CL_SALV_BS_RUNTIME_INFO 与读取ALV有关的方法:

SET() - 此方法初始化类(清除内存区域),然后允许标志的设置让任何后续ALV对象如何工作。它应该在装程序调用ALV报告程序之前被调用。
参数:

  • DISPLAY - 将它设为abap_false强制所有后续ALV报告在“黑暗模式”下运行,也就是说,ALV不会被输出到GUI(但是SM36/SM37后台JOB时候还是会有问题)。
  • METADATA - 将它设为abap_false防止元数据(布局,字段目录等)输出到内存中......一般我们不需要。
  • DATA - 将它设为abap_true迫使数据表导出到内存而不是显示报表。

GET_DATA_REF() - 非常灵活的GET_DATA*方法,这种方法可以用来访问该数据表变量的引用(动态而且易用),所以即使不知道ALV数据表的结构也没关系。
参数:

  • R_DATA - 输出ALV数据表。
  • R_DATA_LINE - 如果执行的ALV有HEADER的(可选)。

GET_DATA() - 如果知道需要调用的ALV数据表的结构,可以使用这个方法。(如果不知道使用上一个:GET_DATA_REF,动态还是好)

  • T_DATA - 输出参数数据表。
  • T_DATA_LINE - 如果执行的ALV有HEADER(可选)。

CLEAR_ALL() - 此方法清除在set()方法设置的标志。如果之后本程序还需要出ALV那么这个方法尤为重要。如果不清除设置,你的ALV就不会被显示出来。

时间: 2024-12-22 16:27:06

程序间获取ALV显示数据(读取ALV GRID上的数据)的相关文章

吐血记录微信小程序授权获取Unionid及linux下使用bouncycastle解密用户数据 遇到的坑

背景 公司小程序上线了,发现系统无法拿到一些用户的UniondID.但是上线前的测试一切都是正常的. 坑1 经排查,发现一些用户通过下面的接口无法得到unionid https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 阅读https://developers.weixin.qq.com/miniprogr

无法显示xml,根级别上的数据无效,第1行,位置1

出现这样的提示一般是xml出了问题,网上有很多修改的方法,而我这里的xml是通过webservice返回来的,出现这样的提示肯定是服务出了问题,一种原因是更改了web服务后返回的xml被编码,在C#中使用UrlDecode可进行反编码解决此问题,需要添加system.web引用,然后 temp=HttpUtility.UrlDecode(temp,Encoding.UTF8); temp是返回的xml我这里是string格式,UTF8即是编码.解决!

GPS数据读取与处理

转自:http://www.cnblogs.com/emouse/archive/2013/05/29/3105745.html GPS模块简介 SiRF芯片在2004年发布的最新的第三代芯片SiRFstar III(GSW 3.0/3.1),使得民用GPS芯片在性能方面登上了一个顶峰,灵敏度比以前的产品大为提升.这一芯片通过采用20万次/频率的相关器提高了灵敏度,冷开机/暖开机/热开机的时间分别达到42s/38s/8s,可以同时追踪20个卫星信道.是目前市场上应用最为广泛,同时性价比也非常高的

TableInputFormat分片及分片数据读取源码级分析

我们在MapReduce中TextInputFormat分片和读取分片数据源码级分析 这篇中以TextInputFormat为例讲解了InputFormat的分片过程以及RecordReader读取分片数据的过程.接下来咱们分析TableInputFormat的分片信息和数据读取过程. TableInputFormat这是专门处理基于HBase的MapReduce的输入数据的格式类.我们可以看看继承结构:(1)public class TableInputFormat extends Table

如何在Silverlight应用程序中获取ASP.NET页面参数

asp.net Silverlight应用程序中获取载体aspx页面参数 有时候SL应用中需要使用由aspx页面中传递过来的参数值,此时通常有两种方法获取 1. 使用InitParameters属性,动态设置传递参数 . 2. 在SL工程中使用HtmlPage类来直接获取页面参数. 如下面的项目结构,我们会在Default.aspx页面中需要传递两个值到SilverlightTestPage.aspx页面,并且需要在SilverlightTestPage.aspx页面所宿主的Silverligh

以多进程读取oss符合条件的数据为例,综合使用多进程间的通信、获取多进程的数据

import datetime import sys import oss2 from itertools import islice import pandas as pd import re import json from pandas.tseries.offsets import Day from multiprocessing import Process, JoinableQueue, cpu_count, Manager import time def mkbuck(bk): au

abap简单报表,alv显示,按钮事件

tables:itab. TYPE-POOLS: slis. "alv "ALV显示标准定义 DATA: g_repid     LIKE sy-repid,       it_fieldcat TYPE lvc_t_fcat WITH HEADER LINE,       is_layout   TYPE lvc_s_layo. DATA: gwk_grid_setting LIKE lvc_s_glay.    "标记选中列 CONSTANTS  pf_status TY

iOS应用程序间共享数据(转)

我们知道iOS由于沙盒的存在,应用程序不能越过自己的区域去访问别的存储空间的内容,不过可能有许多场景我们需要在应用程序之间共享数据,比如多个应用共用用户名密码进行登录等.虽然我们不能直接通过文件系统来分享数据,不过还是有些方法可以实现,为了方便说明,这里同时创建了两个工程Example1和Example2,实现这两个app之间的信息共享,Example1负责写数据,Example2负责读数据,具体的demo代码可以到这里获取 UIPasteboard 剪贴板是应用程序之间传递数据的简单方式,建议

iOS应用程序间共享数据

我们知道iOS由于沙盒的存在,应用程序不能越过自己的区域去访问别的存储空间的内容,不过可能有许多场景我们需要在应用程序之间共享数据,比如多个应用共用用户名密码进行登录等.虽然我们不能直接通过文件系统来分享数据,不过还是有些方法可以实现,为了方便说明,这里同时创建了两个工程send和receive,实现这两个app之间的信息共享,send负责写数据,receive负责读数据,具体的demo代码可以到这里获取 UIPasteboard 剪贴板是应用程序之间传递数据的简单方式,建议不要使用全局的粘贴板