以前做enhancement的时候用过parameter id 和 memory id, 但很多其他语法用法我是没接触过的, 今天看了Palm同鞋做的文档SAP Memory & ABAP Memory, 做了一些测试, 本文几乎所有内容来自Palm同鞋的文档.

1、先弄清External Session 和Internal Session区别:

External Session:

当user登陆SAP后, 就开启了一个userlogon session。当user退出所有sap window, 就结束了这个user logon session。一个userlogon session最多有6个external session(即main session,对应有6个窗口).

Internal Session:

在一个external session内调用其它程序将会生成新的internal session, 比如call FM, call transaction或是submit*** and return等方式。 当关掉这个external session时,也就结束了external session下的所有internal session。一个External session最多有20个Internal session.

对于上面这几个session之间的关系可以这么简单概括:User session > external session > internal session。

SAP memory类似于全局变量,用于Externalsession间的通信,不同的externalsession都可以访问,当退出userlogon session时将清空SAPmemory(不同user对应的SAPmemory不同)。

ABAP memory类似于局部变量,用于同一externalsession下internalsession间的通信,不同的externalsession有不同的ABAPmemory,同一个externalsession里的internalsession只能访问相应session的ABAP memory。

2、网上写的两者几个不同点:

  1. 使用的语句不同

SAP memory使用SET/GET parameters;

SPA:SET PARAMETER ID ‘MAT’ FIELD p_matnr.
GPA:GET PARAMETER ID ‘MAT’ FIELD p_matnr.

ABAP Memory使用EXPORT 和IMPORT :

EXPORT p_matnr = p_matnr TO MEMORY ID ‘ZTESTMAT’.
EXPORT p_matnr = p_matnr FROM MEMORY ID ‘ZTESTMAT’

FREE MEMORY ID ‘ZTESTMAT’. 清空指定的ABAPmemory

FREE MEMORY. 清空externalsession内的所有ABAPmemory

3、共享范围不同

SAP memory用于所有external session间,ABAP memory用于同一个external session的internal session间。

4、作用范围不同(就是生存期)

SAP memory在登陆到退出这期间一直有效。

ABAP memory只在同一个session(window) 内有效。

3、SAP Memory:

  1. 给SAP Memory赋值

创建程序ZTEST_SET_SAP_MMR给‘SAP_MMR’赋值’12345’.

2.获取SAP Memory 的值并显示在选择屏幕上

创建另一个程序ZTEST_GET_SAP_MMR,并为PR_TEST指定Memory ID ,这样SAP_MMR的值将会作为默认值显示在selection screen上。

运行结果,默认值显示在屏幕上:

因为field与SAP Memory绑定了,在selection screen上如果修改对应的值,比如将’12345’改成’123’后按F8,也将修到SAP memory的值.重新运行程序如下:

  1. Dialog获取SAPMemory方式

在dialog 屏幕上建一个input field, 然后Parameter ID属性与’SAP_MMR’绑定,并打上2个勾。

Set Parameter: 允许将屏幕值返回给SAP Memory (类似于执行SET PARAMETER ID语句)

Get Parameter: 允许读取SAP Memory的值并默认显示(类似于执行GET PARAMETER ID语句).

在程序里声明该变量:

给程序创建一个T-code

运行结果(勾上set parameter后,当修改屏幕上的数值时也会反映到SAP memory里):

备注:在Data Element里有一个地方可以填Parameter ID(这个方法好无聊,但SAP可能为了规范参照同一data element的parameter ID,就用了这方法…我只想到这用法,这优点).

创建一个Data Element,并创建一个Parameter ID(存在表TPARA里,以Z或Y打头):

绑定给table或structure:

在Dialog里输入table-field名字时,会提示是否参照Dictionary.

选是了后会自动带出Parameter ID.

此时需要勾上Set Parameter和Get Parameter并在代码里声明ZTESTTEST才有效.

  1. 通过Get parameter ID语句获取SAP memory的值,并赋给LV_TEST

如果SET Parameter ID后退出所有sessions,SAP memory将被清空,重新登陆Get Parameter ID将取到空值。

如果SET Parameter ID后其它user用Get Parameter ID也取不到相应的值。

  1. TCODE SU3设置PARAMETER ID

在TCODE SU3设置了PARAMETER ID后, 运行语句GET PARAMETER ID 后就能读到设置的相关PARAMETER ID的值. 它的功能相当于SET PARAMETER ID.

4、ABAP Memory:

1.建了个程序和FM:

将数据丢到ABAP内存’ABAP_MMR’,被调用的FM是在internal session内运行(或是用submit和call transaction)。

程序代码:(类的方法里不能使用这种语法,只能用下面的第二、三种)

FM代码:

运行结果,FM里可以取到ABAP memory的值。

在程序里取’ABAP_MMR’的值,调用同一个FM取值。

代码:

如果跑完第一步的程序后不关闭窗口再跑这个程序,那么可以成功读到LV_TEST的值。

程序:

FM:

如果跑第一步的程序后用另一窗口(external session)跑第二步程序,将读取不到数值。

运行结果:

程序:

FM:

3.如果export和import的参数名字不同,则需要指定对应参数名(很纠结的,被赋值的Lv_test_2要放在 = 右边,但用 to的话会比较直观)。

结果:

  1. Export多个数据放到ABAP memory里。

结果:

  1. Free Memory:会清空该external session内所有的ABAP Memory.

程序:ZTEST_SET_ABAP_MMR_4

用了Free Memory ID后’ABAP_MMR_1’和’ABAP_MMR_2’都为空,无法用import取值.

  1. Free Memory ID: 清空指定ABAP Memory ID的内容, 其它的ID不受影响.

用了FREE MEMORY ID ‘ABAP_MMR_3’.后, 'ABAP_MMR_3’的数据将被清空,无法取值,但’ABAP_MMR_4’不受影响,可以取到LV_TEST的值(放在LV_TEST_5里).

如果将多个变量一直放在同一ID内, 如果用了Free Memory 或是Free Memory ID(指定这个ID),那这个ID内的所有变量将被全部清空.

网上还说到另外两种传输方式.

Share Memory 或Share Buffer 用于不同用户间的数据传递.

当使用DELETE FROM SHARED BUFFER 语句或是服务器关闭后该内存才会被清空.

使用TOSHARED BUFFER要用FROMSHARED BUFFER取值.

使用TOSHARED MEMORY要用FROMSHARED MEMORY取值.

语法和普通MEMORY ID是一样的

Database 将数据存进表里, 就算服务器关了数据还存在.

表INDX会多一条记录.

读取数据:

语法和普通MEMORY ID是一样的

SAP Memory ABAP Memory超级详细解析相关推荐

  1. SAP and ABAP Memory总结

    (一)          Difference Between SAP and ABAP Memory   (1).读取和使用方法不同 SAP内存使用SET/GET parameters方法: SET ...

  2. 超级详细解析——字模

    超级详细解析--字模 一.简介 汉字库: 即存储汉字的仓库.现在常使用的汉字库有 HZK16.HZK24.HZK32...即对应的16*16.24*24.32*32汉字点阵字库.16X16点阵方式是最 ...

  3. RHCSA 8考题超级详细解析(2022最新版)本人已过

    文章目录 1.配置IP地址 2.配置软件仓库 3.调试SELinux 4.创建用户账户 5. 配置cron计划任务 6.创建共享目录 7.配置NTP时间客户端 8. auto自动挂载 9.配置文件权限 ...

  4. collection集合 多少钱_Java 集合(2)-- Iterator接口源码超级详细解析

    一.iterator接口介绍 iterator接口,也是集合大家庭中的一员.和其他的Map和Collection接口不同,iterator 主要是为了方便遍历集合中的所有元素,用于迭代访问集合中的元素 ...

  5. SAP 移动平均价和标准价详细解析

    更多内容关注公众号:SAP Technical 各位可以关注我的公众号:SAP Technical 正文前序 如果这篇文章看着还不过瘾,那么,请读者朋友看下面推送的那篇文章,肯定让你直呼过瘾,mati ...

  6. SAP FICO 关于资产的详细解析

    SAP资产模块概述 一.概述 资产(AA)模块是资产会计模块的简称,是财务会计(FI)模块的一个子模块,主要处理与各类长期资产相关业务的模块.不单指固定资产,也不泛指资产负债表中的资产,而是指一切可以 ...

  7. TP、TN、FP、FN超级详细解析

    以西瓜数据集为例,我们来详细解释一下什么是TP.TN.FP以及FN. 一.基础概念 TP:被模型预测为正类的正样本 TN:被模型预测为负类的负样本 FP:被模型预测为正类的负样本 FN:被模型预测为负 ...

  8. SAP S/4HANA BP功能详细解析

    从后勤物流角度来看,后勤主要主数据是客户主数据和供应商主数据.我们在S/4HANA中学到的第一件事是客户 - 供应商集成(CVI),也称为业务合作伙伴(BP). 在传统SAP ERP中,客户和供应商是 ...

  9. 7-36 复数四则运算 (15分)【超级详细解析】

    #include <stdio.h> #include <math.h>double a1,b1,a2,b2; //使用double,可以使小数之间的计算更加精确 double ...

最新文章

  1. IE6、 IE7、IE8、Firefox兼容性问题
  2. hibernate正向生成数据库表以及配置——hibernate.cfg.xml
  3. linux的软件很大,linux软件raid10,机器相同,结果差异很大
  4. php validate form,laravel 中validate验证规则 利用FormRequest进行数据验证
  5. dedecms--需要注意的细节
  6. 关于设计模式的感悟2
  7. python - 增强的格式化字符串format函数
  8. 【渝粤教育】国家开放大学2018年春季 0551-21T素描(二) 参考试题
  9. 动画效果之时间轴对象构造器(即逐个执行动画)
  10. 解决电脑屏幕显示器亮度无法调节可能与远程工具向日葵有关
  11. Oracle图书馆借阅管理数据库,图书借阅系统的oracle数据库
  12. 云风:游戏数值公式的表象与本质
  13. 2018年最有前景的十大行业
  14. 网络通信,IP地址, 端口,socket
  15. vue3:加载本地图片等静态资源
  16. vt-x+linux子系统,虚拟机安装linux 系统(二 )解决 Intel VT-x 报错
  17. vue3.0 + JsBarcode 循环生成多个条形码(setup语法糖)
  18. 浅谈PHP与Java之Web开发整合技术
  19. 基于Keil uVision5和Proteus 8 Professional,led循环点亮
  20. 微信小程序入门-音乐播放器

热门文章

  1. 使用Google语音识别引擎(Google Speech API) 1
  2. RN - iOS端后台挂起后30s重启问题处理过程与心得
  3. vue-pdf实现pdf文件在线预览
  4. bsd是linux发行版本,BSD推新版本 Linux不再是唯一开源操作系统
  5. 美国艾美奖最佳男配角获得者 彼得·丁拉基
  6. 人气有所回升,反弹看量能
  7. 慕课面板数据分析与Stata应用—第一章总结
  8. codechef November Challenge 2017解题报告
  9. RedHat RHEL7.2 系统安装详细步骤
  10. Java炸弹人实现及源码