在ABAP遇到的业务场景中,可能会遇到一种情况,需要调用其他报表的数据来发送或者二次加工,这个时候又不想对源程序做大的改动、有以下几种思路解决。

1.修改源程序,将需要展示的数据存储到DB中,然后主程序再从DB中读取;(增加存储开销)

2.Submit配合EXPORT/IMPORT :将数据临时存放到内存中,然后主程序再从内存中读取,及时Free Memory ID;(增加内存开销)

3.修改主程序和源程序的逻辑,增加耦合;(后期运维困难)

4.Copy出源程序的代码逻辑后,将源程序大卸八块,只要逻辑不变,随便怎么改就要能跑起来就行;(推荐这一种)

下面推荐第二种方法:

源程序【被调用程序】:

 *&---------------------------------------------------------------------*
*& Report ZCHENH072
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------* REPORT zchenh072.
PARAMETERS:p_call TYPE c NO-DISPLAY. " 被调用的标志 IF p_call IS INITIAL.
WRITE:/,'未被其他程序调用'.
ELSE.
* WRITE:/,'被其他程序调用开始'. DATA:lv_key TYPE i,
lv_value TYPE string,
BEGIN OF lt_tab OCCURS ,
key TYPE i,
value TYPE string,
END OF lt_tab.
DO TIMES.
lv_key = sy-index.
lv_value = '测试值'.
lt_tab-key = lv_key.
lt_tab-value = lv_value.
APPEND lt_tab.
ENDDO.
EXPORT lt_tab TO MEMORY ID 'EXPORTID'.
* WRITE:/,'被其他程序调用结束'.
ENDIF.

接口【主程序】:

 *&---------------------------------------------------------------------*
*& Report ZCHENH072_1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------* REPORT zchenh072_1.
DATA:BEGIN OF lt_tab OCCURS ,
key TYPE i,
value TYPE string,
END OF lt_tab. SUBMIT zchenh072 WITH p_call = 'X'
AND RETURN.
IMPORT lt_tab FROM MEMORY ID 'EXPORTID'.
FREE MEMORY ID 'EXPORTID'.
BREAK-POINT.

此处注释掉Write的原因,请自行尝试后体会.

使用时注意以下几点:

1.export与import两边的内表(包含内表名称),字段结构(包括长度/内型/小数位数/字段的多少)保持完全一致,建议Copy源程序中的内表到主程序【接口】中,或SE11定义全局结构和内表。

2.Submit后要and return,将数据返回到主程序中。

3.该方法缺点:当后期源程序逻辑变动或者内表结构发生改变,风险极大,不轻易推荐使用。

ABAP 程序/接口调用其他程序的数据的更多相关文章

  1. Asp反向代理程序,调用远程站点全站数据,一款脚本级反向代理程序.

    前些天临时写的一脚本级反向代理程序,用法很简单,设置好目标站地址,然后放到你网站根目录:index.asp,再将404页面自定义为:index.asp,即可. 由于暂时没有 url 替换需要,所以没有 ...

  2. 直接拨号、将电话号码传入拨号程序、调用拨号程序、调用系统浏览器浏览网页、调用系统程序查看联系人、显示系统设置界面和显示Wi-Fi设置界面代码

    直接拨号.将电话号码传入拨号程序.调用拨号程序.调用系统浏览器浏览网页.调用系统程序查看联系人.显示系统设置界面和显示Wi-Fi设置界面代码 拨打号码的代码如下: Intent callIntent= ...

  3. ABAP程序相互调用--SUBMIT

    (1) 调用其他程序: * Trigger the IDOC SUBMIT zpcppmd001_idoc AND RETURN. (2) 调用其他程序参数传递参数: *当被调用的程序的屏幕有输入参数 ...

  4. DUBBO监控,设置接口调用数据的上报周期

    目录 DUBBO监控,设置接口调用数据的上报周期 dubbo已有的监控方案 针对已有方案的改进 DUBBO监控,设置接口调用数据的上报周期 dubbo是目前比较好用的,用来实现soa架构的一个工具,d ...

  5. 以聚合数据免费接口为例,通过 Class 类继承方法,让小程序实现项目化接口调用

    微信小程序数据来源,是通过接口实现的.但接口如何调,数据如何取?每个人都有不同的方法,下面以聚合数据免费接口为例. 配置接口 config.js 聚合数据请求接口需要以key作为参数. const c ...

  6. ABAP程序互调用:SUBMIT、CALL TRANSACTION、LEAVE TO TRANSACTION

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. 【微信小程序】调用wx.request接口需要注意的问题

    写在前面 之前写了一篇<微信小程序实现各种特效实例>,上次的小程序的项目我负责大部分前端后台接口的对接,然后学长帮我改了一些问题.总的来说,收获了不少吧! 现在项目已经完成,还是要陆陆续续 ...

  8. 【小程序】调用wx.request接口时需要注意的问题

    写在前面 之前写了一篇<微信小程序实现各种特效实例>,上次的小程序的项目我负责大部分前端后台接口的对接,然后学长帮我改了一些问题.总的来说,收获了不少吧! 现在项目已经完成,还是要陆陆续续 ...

  9. 微信小程序PHP 微信支付接口调用

    小程序端 /** * 微信支付接口 */ wxPaymoney:function (out_trade_no, true_money){ //out_trade_no 后台统一下单接口需要用 var ...

随机推荐

  1. Celery结合Django使用

    一.Celery介绍 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个 ...

  2. mysql主从原理及配置

    一.mysql集群架构: 1.一主一从 2.双主 3.一主多从(扩展mysql的读性能) 4.多主一从(5.7开始支持) 5.联机复制 关系图: 二.配置主从用途及条件 2.1用途 1.保障可用性,故 ...

  3. 【C++】Lambda表达式

    转自 https://www.cnblogs.com/DswCnblog/p/5629165.html 作者:dsw846 C++11的一大亮点就是引入了Lambda表达式.利用Lambda表达式,可 ...

  4. 工控随笔_09_西门子_S7-200 Smart与V20 USS通信USS_RPM_R利用轮询的方式通讯异常

    前两天处理过一个故障,是S7-200 Smart与V20的USS通讯,设备厂家在程序里面利 用USS_RPM _R程序循环轮询5个V20设备读取频率和电流值等信息. 图 USS_RPM_R读取信息 上 ...

  5. [蓝桥杯]PREV-12.历届试题_危险系数

    问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个危险系数DF( ...

  6. SSD硬盘测速较低的原因备忘

    SATA3 SSD测速度盘速度只有200MB/s,可能原因有: 原因分为几种:没开AHCI 没有4K对齐 虽然接的是SATA3接口但SATA3有分为3G和6G这些传输速度接口的分别,同理SATA线3G ...

  7. apache2.4+php7.3.2+mysql5.7

    一.下载php7和apache2.4 1 首先下载php7的windows压缩包,到这里下载http://windows.php.net/download/ 我选择的是php7的这个版本,由于它是vc ...

  8. Java中的“==操作符”和equals方法有什么区别

    Java中的"=="和equals方法究竟有什么区别? 1.==操作符 "=="操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的 ...

  9. [UE4]重构Grab和Drop

    一.在前面的实例中是把Grab和Drop逻辑放到SimVRHand手柄对象里面,从面向对象来看,Grab和Drop逻辑应该放在被抓取的对象中,因为可能每个对象被抓取后要执行的Grab和Drop逻辑都不 ...

  10. WordPress版微信小程序3.2版发布

    WordPress版微信小程序(下称开源版)距离上次更新已经过去大半年了,在此期间,我开发新的专业版本-微慕小程序(下称微慕版),同时开源版的用户越来越多,截止到2018年11月26日,在github ...