内存管理
内存是程序之间为了传递数据而使用的共享存储空间
SAP内存分类
-
SAP内存
主会话之间的数据共享
通过SET/GET PARAMETER语句共享不同ABAP内存领域之间的内存 -
ABAP内存
内部会话之间的数据共享
只有在同一个窗口执行的程序才能共享内存
在每个程序里使用的内存有ABAP内存和SAP内存
外部会话(External Session)
一般来讲,一个外部会话是一个R/3系统的窗口。
当用户成功登录SAP系统时,就开始了一个和应用服务器之间的外部会话,可以通过如下几种方式同时打开多个外部会话:
- 通过点SAP GUI系统工具条上的按钮
- 选择系统主菜单“System Create Session”
- 在Command Field中输入
/O<TCODE>
回车,如输入“/OSE11”,将在新开辟的一个外部会话窗体中执行TCODE: SE11
SAP缓冲器
- 可以利用SAP内存在Work Process之间共享内存
- SAP应用程序系统各自拥有自己的缓冲器(Client Cashe)
- 缓冲器在Client级别上互相共享,因此SAP缓冲器在所有主会话中共享数据
内部会话(Internal Session)
- 外部会话被分成了多个内部会话,这些内部会话被放在一个堆栈(STACK,一个后进先出的线形结构)里面
- 每个ABAP程序在运行时都占用一个内部会话,每个外部会话可以包含最多九个内部会话。
- 在内部会话中使用CALL TRANSACTION等命令调用其他程序,则内部会话之间共享ABAP内存
SAP 内存
SAP内存使用SPA/GPA技术传递程序间数据
- 传递内存参数来给其他程序输入字段赋值的操作成为“SPA/GPA技术”
- SAP/GPA参数指的是利用SAP内存的参数,表TPARA中进行确认
- 只限相同的用户共享内存,又叫User Specific参数
SPA/GPA参数信息可以在创建SAP内存参数
- SE80->Workbench->Edit Object
- SM30->TPARA表,维护条目
在TYPE1报表程序的选择画面上的参数或者select-option变量,使用的是MEMORY ID来连接字段与参数;
在ONLINE界面中,在PARAMETER ID字段设置内存ID,及SET/GET设置
使用HIDE语句,将字段值保存到HIDE内存领域;
Debug界面查询Goto->System Areas->SAP Memory
ABAP 内存
使用ABAP内存时可以在程序级别上任意指定内存ID名,不需要参数ID
利用ABAP内存使用语句
EXPORT … TO … "向MEMORY ID传出数据
IMPORT … FROM … "从MEMORY ID传入数据
FREE MEMORY ID "删除ABAP内存
使用CALL TRANSACTION/SUBMIT/CALL DIALOG等命令调用其他程序时,会生成内部会话并共享ABAP内存中数据
SAP内存与ABAP内存的不同
SAP内存
全局内存,用户终端会话内的所有外部会话都可以访问
SAP内存在外部会话中的所有内部会话中可以共享
基本语句
SET PARAMETER / GET PARAMETER
ABAP内存
同一个会话中执行的所有程序共享的内存
外部会话中只存在一个ABAP内存
基本语句
EXPORT obj1 … objn TO MEMORY ID key.
IMPORT obj1 … objn FROM MEMORY ID key.
程序间调用
接口:使用SUBMIT语句调用type1程序,调用选择界面
SUBMIT program
WITH p_1 = val1
WITH s_1 IN r_1
VIA SELECTION SCREEN
AND RETURN .
注意:不同参数的传值方法
PARAMETERS WITH P_1 = VAL1
SELECT-OPTIONS WITH S_1 IN R_1
RADIO BUTTON WITH R_1 = ‘X’ WITH R_2 = ‘’
CHECKBOX WITH C_1 = ‘X’ WITH C_2 = ‘X’ WITH C_3 = ‘’
- 直接调用事务代码
CALL TRANSACTION ‘tcode’ AND SKIP FIRST SCREEN.