Appearance
ABAP 内存
一、介绍
SPA/GPA
参数分配 SAP内存领域,相反,当执行EXPORT 时还会分配 ABAP 内存领域。利用 EXPORT语句可以把数据对象(字段、结构体、内表)负载到ABAP内存中。为了利用SAP内存。需要生成参数D。相反,当使用ABAP内存时可以在程序级别上任意指定内存ID名。利用 ABAP内存传递数据时需使用 EXPORT/IMPORT语句,同时需使用相同的参数ID名。当调用其他程序需要传递数据对象(内表等)时,常使用EXPORTIIMPORT语句。使用(CALLTRANSACTION,SUBMIT,CALLDIALOG)这种命令调用其他程序时,会生成内部会话并且共享ABAP内存中存在的数据。
ABAP内存领域只在内部会话中共享数据,因此不能把数据传递到其他外部会话的程序中(使用共享缓冲器倒可以实现)。即EXPORTIMPORT只有在相同窗口中共享内存领域,因此当打开新窗口进行操作时,内存领域会消失。IMPORTEXPORT程序的对象名必须相同。
abap
EXPORT obj1 ... objn TO MEMORY ID key.
abap
IMPORT obj...bojn FROM MEMORY ID key.
删除 ABAP内存中保存的内容时使用下列语句。此时,若省略IDkey 则会删除全部内存,因此要注意。
abap
FREE MEMORY [lD key].
利用[例 11-5]、[例 11-6]练习内部会话程序间传递内表数据的过程。
[例11-5]
abap
REPORT z11_05.
TABLES : sflight.
DATA : gt_sflight TYPE TABLE OF sflight.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
FROM sflight
WHERE carrid = 'AA'.
EXPORT gt_sflight TO MEMORY ID 'TEST_ID'
CALL TRANSACTION 'TZ11_06'
AND SKIP FIRST SCREEN.
在EXPORT语句中,用TESTID的ID名将内表GTSFLIGHT保存在 ABAP内存中。领域然后调用事务码Z1106
。
[例11-6]
abap
REPORT TZ11_06.
TABLES : sflight.
DATA : gt_sflight TYPE TABLE OF sflight WITH HEADER LINE.
IMPORT gt_sflight FROM MEMORY ID 'TEST_ID'
LOOP AT gt_sflight.
WRITE gt_sflight-carrid.
ENDLOOP.
用IMPORT语句将SAP内存的数据保存在内表GTSFLGIHT中。
[结果 11-6]
abap
AA AA AA AA AA AA AA AA AA AA AA AA AA AA
调用事务码或执行可能的程序,分两种形式进行说明。
第一,结束被调用的程序回到原程序,被调用的程序不会被删除而会变成非激活状态。另外,存储在内存中的值会移动到栈(Stack)中。这种操作最多可以执行9次。[例11-5]中不使用 CALLTRANSACTION'Z1106'
,而使用调用 TYPE-1程序的 SUBMITZ11 06
语句.可以得到相同的结果。这是因为创建新的会话后调用的程序以Iactive 状态存储在堆栈中。在新程序中遇到 LEAVE PROGRAM 命令会回到原来的程序中。
第二,结束被调用的程序后不回到原程序,则被调用的程序在内部会话中将替代原程序并且删除原程序的内存值。[例11-5]中不使用CALL TRANSACTIONZ11 06
语句,而使用LEAVE TO TRANSACTION 命令,则程序间无法传递数据。因为 LEAVE TO TRANSACTION
是在栈中将以前的所有内部会话删除,然后生成新的内部会话再调用事务码。即使使用了LEAVE TO TRANSACTION语句,利用SAP内存也可以传递数据。但是若结束事务码,则无法返回到原程序,而会回到主菜单中。
<ABAP TiP. EXPORT/MPORT Shared Buffer (Database Buffer)>
利用下列语句可以将数据对象(字段、结构体、内表.)保存到Cross-transactionApplication Bufer
中。指定KeyID从共享缓冲器(Shared Bufer)领域中传出数据对象。SAP缓冲器使用的是 SAP内存领域,因此在所有主会话和内部会话中都可以共享数据。(不同于SPA/GPA 参数,还可以与其他用户共享数据)。
abap
EXPORT obj1 ... objn TO SHARED BUFFER indx(st) ID key.
abap
IMPORT obj1 ... objn FROM SHARED BUFFER indx(st) ID key.
通过例题理解共享缓冲器(SharedBufer)的作用。
[例11-7]
abap
REPORT z11_07.
TABLES indx.
DATA : indxkey LlKE indx-srtfd VALUE 'KEYVALUE'.
DATA : gs_sflight TYPE sflight.
SELECT SINGLE * INTO gs_sflight
FROM sflight.
indx-aedat = sy-datum.
indx-usera =sy-uname.
EXPORT gs_sflight TO SHARED BUFFER indx(st) ID indxkey.
CLEAR gs_sflight.
IMPORT gs_sflight FROM SHARED BUFFER indx(st) ID indxkey.
WRITE : gs_sflight-carrid, gs_sflight-connid, gs_sflight-fldate.
[结果 11-7]
abap
AA 0017 2015.11.17