首页 > 其他分享 >SAP Memory & ABAP Memory

SAP Memory & ABAP Memory

时间:2023-03-05 14:11:32浏览次数:23  
标签:Memory ABAP session memory SAP ID

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、网上写的两者几个不同点:

使用的语句不同
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:

给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的值.重新运行程序如下:

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才有效.

通过Get parameter ID语句获取SAP memory的值,并赋给LV_TEST
如果SET Parameter ID后退出所有sessions,SAP memory将被清空,重新登陆Get Parameter ID将取到空值。

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

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的话会比较直观)。

 

结果:

Export多个数据放到ABAP memory里。

 

 

结果:

 

 

 

 

 

 


Free Memory:会清空该external session内所有的ABAP Memory.
程序:ZTEST_SET_ABAP_MMR_4

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

 

 


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是一样的
————————————————
版权声明:本文为CSDN博主「勤恳蜗牛」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011525922/article/details/126976325

标签:Memory,ABAP,session,memory,SAP,ID
From: https://www.cnblogs.com/yushuiguodong/p/17180385.html

相关文章

  • 诚邀报名 | SAP 乘云而上私享会-上海站
     在快速发展中,您的业务与组织是否发生了明显变化? 您是否在思考云转型与数字化转型带来的业务价值? 进入受限制的“客户特定维护”阶段会带来风险吗? 哪些保驾护航服......
  • SAP 邮件配置 & 发送demo
    一、 修改参数(RZ11)SMTP协议标准端口号为25,部分服务器25端口已被占用,也可以使用其他端口,例如25000,25$$。$$为实例号执行事务码RZ11,修改参数is/SMTP/virt_host_0=*:25;......
  • Pandas read_csv:low_memory 和 dtype 选项
    df=pd.read_csv('somefile.csv')...给出错误:.../site-packages/pandas/io/parsers.py:1130:DtypeWarning:列(4,5,7,16)具有混合类型。在导入时指定dtype......
  • sap -文本编辑器
    DATA:ok_codeTYPEsy-ucomm,save_okTYPEsy-ucomm.DATA:init.DATA:containerTYPEREFTOcl_gui_custom_container.DATA:editorTYPEREFTOcl_gui_texted......
  • mysql的Memory存储引擎
    介绍:Memory存储引擎的表数据存储在内存中,由于受到硬件的问题、或断电问题的影响,只能将这些表作为临时的表或缓存使用。特点:内存存放、hash索引(默认)文件:xxx.sdi(存表结构信......
  • [ChatGPT 勘误] SAP ABAP 里 cl_r3standard_persistence 的用途?
    首先看ChatGPT的回答:这答案完全不正确。在SAPABAP中,cl_r3standard_persistence是一个用于管理ABAP数据库操作的类。它提供了一系列静态方法,用于执行与ABAP数据......
  • [ChatGPT 勘误]SAP ABAP 里 CL_WB_ED_ENHANCEMENT_HANDLER 的用途介绍
    以下是ChatGPT关于CL_WB_ED_ENHANCEMENT_HANDLER的介绍:在ABAP中,CL_WB_ED_ENHANCEMENT_HANDLER是一个用于管理ABAP代码增强(CodeEnhancement)的类。ABAP代码增强......
  • Xilinx XPM使用说明--XPM_MEMORY_SDPRAM
    XPM_MEMORY_SDPRAM参数化宏:简单的双端口RAM 介绍此宏用于实例化简单双端口RAM。端口A用于从存储器执行写入操作,端口B可用于从存储器读取。下面介绍XPM_MEMORY实例的......
  • ABAP 辨析 标准表|排序表|哈希表
    1、文档介绍本文档将介绍内表的区别和用法,涉及标准表、排序表、哈希表2、用法与区别2.1、内表种类内表顶层为任意表,任意表分为索引表和哈希表,索引表又可分为标准表和排......
  • SAP PP
    1、BOM组件特殊获取方式: 若BOM中某组件标记为供应商提供,则系统不会产生该物料的相关需求;若BOM中某组件标记为虚拟件,如半成品标记为虚拟件,则一般来说系统将不会产生该......