Appearance
概要
一、ABAP 程序的内存结构
用户登录到 SAP 客户端,生成一个用户终端会话(UserTerminalSession)(或称为SAP客户端会话)。一个终端会话中可以执行6个R/3窗口。每个R/3窗口互相共享内存领域。一个外部会话(ExtemmalSession)意味着6个作业窗口,当单击新窗口(器)图标或在命令窗口中执行"O[T-CODE],最多可以打开6个追加窗口。(外部会话也称为主会话)。另外,一个外部会话最多可以拥有20个 内部会话。内部会话(InteralSession)指的是一个外部会话内执行程序调用另一个程序时生成的内部会话。
[图11-1]中,外部会话1的内部会话执行 ABAP 程序。在每个程序里使用的内存有ABAP内存与SAP内存。在内部会话中用CALL TRANSACTION 等命令调用其他程序,则内部会话之间共享ABAP内存。ABAP内存只是内部会话之间分配的内存,因此只有在同一个窗口中执行的程序才能共享此内存。在图中ABAP内存只能在自身的外部会话中共享,而 SAP内存通过 SETGETPRAMETER 语句可以共享不同 ABAP内存领域之间的内存。 SAP内存在外部会话中的所有内部会话中可以共享。SAP缓冲器可以利用SAP内存在WorkProcess之间共享内存。SAP应用程序系统各自拥有自己的缓冲器(又名Client Cache)。缓冲器在Client级别上互相共享,因此SAP 缓冲器在所有主会话中共享数据。
二、SAP内存与ABAP内存之间的不同点
在理解了SAP内存与 ABAP内存的概念的前提下,比较程序内各个内存的使用情况。详情见后续内容。
1.SAP 内存
SAP内存是用户终端会话内的所有外部会话都可以访问的全局内存。即用户利用SAP客户端登录的状态下执行的所有程序都可以共享的内存领域。
SAP内存数据利用SET/GET语句传达内存参数。
abap
SET PARAMETER /GET PARAMETER
2.ABAP 内存
ABAP内存是在同一个外部会话中执行的所有程序共享的内存。即在外部会话中只存在一个ABAP内存。个别程序有自己的内部会话且内部会话积累在栈(Stack)中。利用EXPORT/IMPORT语句传递程序间的数据。
abap
EXPORT objl ... objn TO MEMORY ID key.
abap
IMPORT obi...boin FROM MEMORY ID key.
程序间传递数据的方法如[图11-2]所示,大致分为下列5种。本单元只介绍利用ABAP内存、SAP 内存的方法。 (1)接口
接口是调用 TYPE-1程序时利用 SUBMIT 语句输入选择画面的值或者调用选择画面的变式(Variant)的方法。此方法在第12章中学习。
(2)ABAP 内存
利用ABAP内存传递数据时,使用EXPORT/IMPORT语句且要使用相同的参数ID名。
(3)SAP 内存
利用 SAP 内存领域的参数ID传递数据。
(4)数据库表
最常用的方法是程序A把数据存储到表中,然后程序B从表中查询数据。
(5)表示层(Presentation Server)
表示层指的是SAP客户端给执行的本地电脑用文件上传/下载数据的方法(利用GUI DOWNLOAD
,GUI UPLOAD
等函数)。