SAP Memory ABAP Memory超级详细解析

news2024/9/22 3:37:57

SAP Memory & ABAP Memory超级详细解析_abap set parameter id-CSDN博客

FREE MEMORY ID 'ZTESTMAT'.                     清空指定的ABAPmemory

FREE MEMORY.                                               清空externalsession内的所有ABAPmemory

最后请注意

IMPORT .... FROM MEMORY ID ....

该语句执行未接收到数据会将sy-subrc赋值为不等于零
转:ABAP MEMORY/SAP MEMORY/Shared buffer/DATABASE_abap to shared buffer-CSDN博客

REPORT ZTXYY_11131.
DATA LV_FLAG.
LV_FLAG = 'X'.
EXPORT LV_FLAG TO MEMORY ID 'ZTXYY_11130'.
SUBMIT ZTXYY_11130.
REPORT ZTXYY_11130.
DATA LV_FLAG.
IMPORT LV_FLAG FROM MEMORY ID 'ZTXYY_11130'.
WRITE LV_FLAG.

结果

REPORT ZTXYY_11131.
DATA LV_FLAG.
LV_FLAG = 'X'.
EXPORT PV = LV_FLAG TO MEMORY ID 'ZTXYY_11130'.
SUBMIT ZTXYY_11130.
REPORT ZTXYY_11130.
DATA LV_FLAG.
IMPORT PV = LV_FLAG FROM MEMORY ID 'ZTXYY_11130'.
WRITE LV_FLAG.

 结果

REPORT ZTXYY_11131.
DATA LV_FLAG.
LV_FLAG = 'X'.
EXPORT PV FROM LV_FLAG TO MEMORY ID 'ZTXYY_11130'.
SUBMIT ZTXYY_11130.
REPORT ZTXYY_11130.
DATA LV_FLAG.
IMPORT PV TO LV_FLAG FROM MEMORY ID 'ZTXYY_11130'.
WRITE LV_FLAG.

 结果

在动态情况下,参数列表在带有两列的索引表 ptab 中指定。这两列可以有任何名称,但必须是 “字符 ”类型。ptab 的第一列必须包含参数名称,第二列必须包含大写的数据对象。如果第二列是首列,则第一列中的参数名称必须与数据对象的名称一致。然后,数据对象将以其名称存储在数据集群中。如果 ptab 的第一列为初始值,则会出现不可处理异常。

REPORT ZTXYY_11131.
DATA LV_FLAG.
LV_FLAG = 'X'.
DATA QR TYPE STANDARD TABLE OF STRING.
APPEND INITIAL LINE TO QR ASSIGNING FIELD-SYMBOL(<FW>).
"这里的指针是工作区哦!
<FW> = 'LV_FLAG'.
EXPORT (QR) TO MEMORY ID 'ZTXYY_11130'.
SUBMIT ZTXYY_11130.
REPORT ZTXYY_11130.
DATA LV_FLAG.
DATA QR TYPE STANDARD TABLE OF STRING.
APPEND INITIAL LINE TO QR ASSIGNING FIELD-SYMBOL(<FW>).
"这里的指针是工作区哦!
<FW> = 'LV_FLAG'.
IMPORT (QR)  FROM MEMORY ID 'ZTXYY_11130'.
FREE MEMORY ID 'ZTXYY_11130'.
WRITE LV_FLAG.
TYPES: 
  BEGIN OF tab_type, 
    para TYPE string, 
    dobj TYPE string, 
  END OF tab_type. 

DATA: 
  id    TYPE c LENGTH 10 VALUE 'TEXTS', 
  text1 TYPE string VALUE `IKE`, 
  text2 TYPE string VALUE `TINA`, 
  line  TYPE tab_type, 
  itab  TYPE STANDARD TABLE OF tab_type. 

line-para = 'P1'. 
line-dobj = 'TEXT1'. 
APPEND line TO itab. 

line-para = 'P2'. 
line-dobj = 'TEXT2'. 
APPEND line TO itab. 

EXPORT (itab)     TO MEMORY ID id. 
IMPORT p1 = text2 
       p2 = text1 FROM MEMORY ID id. 

DATA LV_FLAG.
DATA LV_FLAG2.
LV_FLAG = 'X'.
LV_FLAG2 = 'D'.
TYPES: BEGIN OF QRTY,
  Q1 TYPE C LENGTH 10,
  Q2(10),
END OF QRTY.
DATA QR TYPE STANDARD TABLE OF QRTY.
APPEND INITIAL LINE TO QR ASSIGNING FIELD-SYMBOL(<FW>).
"这里的指针是工作区哦!
<FW>-Q1 = 'PV'.
<FW>-Q2 = 'LV_FLAG'.
APPEND INITIAL LINE TO QR ASSIGNING <FW>.
<FW>-Q1 = 'PV3'.
<FW>-Q2 = 'LV_FLAG2'.
EXPORT (QR) TO MEMORY ID 'ZTXYY_11130'.
SUBMIT ZTXYY_11130.
REPORT ZTXYY_11130.
DATA LV_FLAG.
DATA LV_FLAG2.
TYPES: BEGIN OF QRTY,
  Q1 TYPE C LENGTH 10,
  Q2(10),
END OF QRTY.
DATA QR TYPE STANDARD TABLE OF QRTY.
APPEND INITIAL LINE TO QR ASSIGNING FIELD-SYMBOL(<FW>).
"这里的指针是工作区哦!
<FW>-Q1 = 'PV'.
<FW>-Q2 = 'LV_FLAG'.
APPEND INITIAL LINE TO QR ASSIGNING <FW>.
<FW>-Q1 = 'PV2'.
<FW>-Q2 = 'LV_FLAG2'.
IMPORT (QR)  FROM MEMORY ID 'ZTXYY_11130'.
FREE MEMORY ID 'ZTXYY_11130'.
WRITE LV_FLAG.
WRITE:/ LV_FLAG2.

   结果

该新增项指定是否压缩数据集群中的数据。默认情况下,除了中型数据库表之外,所有内存介质的压缩都是停用的。如果需要压缩,必须使用 “开启 ”打开。如果存储在数据库表中,则默认开启压缩,只有指定 OFF 时才会关闭压缩。

DATA LV_FLAG.
DATA LV_FLAG2.
LV_FLAG = 'X'.
LV_FLAG2 = 'D'.
TYPES: BEGIN OF QRTY,
  Q1 TYPE C LENGTH 10,
  Q2(10),
END OF QRTY.

DATA QR TYPE STANDARD TABLE OF QRTY.
APPEND INITIAL LINE TO QR ASSIGNING FIELD-SYMBOL(<FW>).
"这里的指针是工作区哦!
<FW>-Q1 = 'PV'.
<FW>-Q2 = 'LV_FLAG'.
APPEND INITIAL LINE TO QR ASSIGNING <FW>.
<FW>-Q1 = 'PV3'.
<FW>-Q2 = 'LV_FLAG2'.

EXPORT (QR) TO MEMORY ID 'ZTXYY_11130' COMPRESSION ON."OFF
SUBMIT ZTXYY_11130.
REPORT ZTXYY_11130.
DATA LV_FLAG.
DATA LV_FLAG2.
TYPES: BEGIN OF QRTY,
  Q1 TYPE C LENGTH 10,
  Q2(10),
END OF QRTY.

DATA QR TYPE STANDARD TABLE OF QRTY.
APPEND INITIAL LINE TO QR ASSIGNING FIELD-SYMBOL(<FW>).
"这里的指针是工作区哦!
<FW>-Q1 = 'PV'.
<FW>-Q2 = 'LV_FLAG'.
APPEND INITIAL LINE TO QR ASSIGNING <FW>.
<FW>-Q1 = 'PV2'.
<FW>-Q2 = 'LV_FLAG2'.
IMPORT (QR)  FROM MEMORY ID 'ZTXYY_11130'.
FREE MEMORY ID 'ZTXYY_11130'.
WRITE LV_FLAG.
WRITE:/ LV_FLAG2.

REPORT ZTXYY_11131.
TYPES:
BEGIN OF tab_type,
  col1 TYPE I,
  col2 TYPE I,
END OF tab_type.

DATA:
      wa_indx TYPE demo_indx_table,
      wa_itab TYPE tab_type,
      itab  TYPE STANDARD TABLE OF tab_type.

WHILE sy-INDEX < 100.
  wa_itab-col1 = sy-INDEX.
  wa_itab-col2 = sy-INDEX ** 2.
  APPEND wa_itab TO itab.
ENDWHILE.

wa_indx-timestamp = sy-datum && sy-uzeit.
wa_indx-userid    = sy-uname.

EXPORT tab = itab
TO DATABASE demo_indx_table(SQ)  "最终存在demo_indx_table表中
"FROM wa_indx  "可加可不加不影响执行
ID 'TABLE'.
SUBMIT ZTXYY_11130.
REPORT ZTXYY_11130.
TYPES:
BEGIN OF tab,
  col1 TYPE I,
  col2 TYPE I,
END OF tab.

DATA:
      wa_indx TYPE demo_indx_table,
      itab    TYPE STANDARD TABLE OF tab.
"DELETE FROM DATABASE demo_indx_table(SQ) ID 'TABLE'.
IMPORT tab = itab
FROM DATABASE demo_indx_table(SQ)
"CLIENT '311' "控制客户端
"TO   wa_indx   "可加可不加不影响执行
ID 'TABLE'.

cl_demo_output=>write_data( wa_indx-timestamp ).
cl_demo_output=>write_data( wa_indx-userid ).
cl_demo_output=>display_data( itab ).

在 TO 之后,可以指定与数据库表 dbtab 具有相同数据类型的工作区 wa。导入时,介于字段 SRTF2 和 CLUSTR 之间的数据库字段值将分配给 wa 中的同名组件。如果在类中未指定添加 TO wa,则这些组件中不会进行数据传输。如果在类外未指定添加 TO wa,但使用语句 TABLES 声明了数据库表 dbtab 的表工作区,则这些数据库字段的值将在导入时分配给表工作区 dbtab 的同名组件。

如果数据库表 dbtab 是特定于客户的,则可在 CLIENT 后指定一个扁平字符字段 cl。该字段包含客户 ID。如果未指定加法,则使用当前客户端。

REPORT ZTXYY_11131.
DATA LV_FLAG TYPE XSTRING.
DATA LV_FLAG2.
DATA LV_FLAG3 TYPE XSTRING.
DATA dbtab LIKE indx.
DATA: matnr TYPE matnr.
matnr = '000000000000123456'.
EXPORT matnr TO SHARED BUFFER INDX(ar)
FROM DBTAB
CLIENT '302'  "控制客户端
ID 'YTEST_MATNR'.
SUBMIT ZTXYY_11130.
REPORT ZTXYY_11130.
DATA dbtab LIKE indx.
DATA: matnr TYPE matnr.
matnr = '000000000000123456'.
IMPORT matnr FROM SHARED BUFFER INDX(ar)
TO DBTAB
CLIENT '302'  "控制客户端
ID 'YTEST_MATNR'.


cl_demo_output=>display_data( matnr ).
cl_demo_output=>display_data( DBTAB ).
REPORT ZTXYY_11131.
DATA LV_FLAG TYPE XSTRING.
DATA LV_FLAG2.
DATA LV_FLAG3 TYPE XSTRING.
DATA dbtab LIKE indx.
DATA: matnr TYPE matnr.
matnr = '000000000000123456'.

EXPORT matnr TO SHARED MEMORY INDX(ar)
FROM DBTAB
CLIENT '302'  "控制客户端
ID 'YTEST_MATNR'.

SUBMIT ZTXYY_11130.
REPORT ZTXYY_11130.
DATA dbtab LIKE indx.
DATA: matnr TYPE matnr.
IMPORT matnr FROM SHARED MEMORY INDX(ar)
TO DBTAB
CLIENT '302'  "控制客户端
ID 'YTEST_MATNR'.
cl_demo_output=>display_data( matnr ).
cl_demo_output=>display_data( DBTAB ).

该语句将使用 EXPORT 语句写入数据库表 dbtab 的数据集群的所有数据对象的内容表传递给内部表 itab,数据库表 dbtab 的 ID 位于 id 中指定的区域 ar 中。数据库表 dbtab 的设置方法必须与 EXPORT 语句(类似 INDX)的设置方法相同。ID 是一个平面字符型数据对象,包含数据集群的 ID,必须直接指定两个字符的区域 ar。添加的 TO 和 CLIENT 与语句 IMPORT 中描述的数据集群重要数据的相关性相同。

对于 itab,允许使用行类型与 ABAP 字典中 CDIR 结构相匹配的索引表。下表列出了 CDIR 结构的组件及其相关性。
组件 类型 含义 
NAME CHAR(30) 保存数据对象的参数名称。
OTYPE: CHAR(1) 所保存数据对象的一般类型。允许使用以下值: F “表示基本的平面数据对象,”G “表示字符串,”R “表示平面结构,”S “表示深层结构,”T “表示具有平面行类型的内部表,”C "表示具有深层行类型的表。
FTYPE CHAR(1) 所保存数据对象的更具体类型。对于基本数据对象和具有基本行类型的内部表,数据或行类型将根据 DESCRIBE FIELD ... 的返回值表返回。类型的返回值表。对于平面结构和具有平面结构行类型的内部表,将返回 “C”。对于深层结构和具有深层结构行类型的内部表,将返回 “v”。如果表的行类型是内部表,则返回 “h”。
TFILL INT4 已保存数据对象的填充长度。对于字符串,返回以字节为单位的内容长度,对于内部表格,返回行数。对于其他数据对象,返回值为 0。
FLENG INT2 保存的数据对象或保存的表格行的长度(字节)。对于字符串,返回值为 8。

REPORT ZTXYY_11131.
DATA: f1 TYPE decfloat16,
      f2 TYPE TABLE OF I,
      f3 TYPE spfli.
DATA:
      wa_indx TYPE demo_indx_table.
DATA itab TYPE STANDARD TABLE OF cdir.

f2 = VALUE #( FOR j = 1 UNTIL j > 10 ( j ) ).

EXPORT par1 = f1
par2 = f2
par3 = f3 TO DATABASE demo_indx_table(HK)
CLIENT '302'  "控制客户端
ID 'HK'.
SUBMIT ZTXYY_11130.
REPORT ZTXYY_11130.
DATA:
      wa_indx TYPE demo_indx_table.
DATA itab TYPE STANDARD TABLE OF cdir.
IMPORT DIRECTORY INTO itab FROM DATABASE demo_indx_table(HK)
CLIENT '302'  "控制客户端
ID 'HK'.
cl_demo_output=>display_data( itab ).

如果使用 TABLES 为相关数据库表声明了表工作区 dbtab,则可以为 IMPORT FROM DATABASE 指定此附加项。不允许添加 TO wa。数据不会从数据库表导入。而是调用子程序 subr。在子程序中,必须在表工作区 dbtab 中提供数据集群的第一行,就像从数据库中读取一样。然后,该子程序将根据需要自动调用,直到导入一个完整的数据集群。每次调用时,都必须相应填写表工作区 dbtab。

子程序必须在同一程序或明确指定的程序(prog)中定义。其名称必须以数据库表的名称(“dbtab”)为前缀。子程序必须有一个任意类型的 USING 参数,目前没有提供。

 使用后数据信息不会存入数据库表demo_indx_table

REPORT ZTXYY_11131.
TABLES demo_indx_table.

DATA demo_indx_tab TYPE TABLE OF demo_indx_table.

DATA sflight_tab TYPE TABLE OF sflight.
SELECT * FROM sflight INTO TABLE @sflight_tab.
EXPORT sflight_tab TO DATABASE demo_indx_table(fl) ID 'FLIGHTS'
USING demo_indx_table_export.

demo_indx_table-srtf2 = 0.
IMPORT sflight_tab FROM DATABASE demo_indx_table(fl) ID 'FLIGHTS'
USING demo_indx_table_import.
cl_demo_output=>display_data( sflight_tab ).
FORM demo_indx_table_import USING foo.
  demo_indx_table = demo_indx_tab[ srtf2 = demo_indx_table-srtf2 ].
  demo_indx_table-SRTF2 = demo_indx_table-srtf2 + 1.
ENDFORM.
FORM demo_indx_table_export USING foo.
  APPEND demo_indx_table TO demo_indx_tab.
ENDFORM.

 

这些新增功能允许将数据集群中保存的数据导入到非类型友好型数据对象中。它们还定义了适当的转换规则。下表显示了从不同缓冲区导入数据时可以使用的附加项。列标题是以下缓冲区的缩写: 数据缓冲区 (B)、内存 (M)、共享内存 (SM)、共享缓冲区 (SB)、数据库 (DB) 和内部表 (IT)。

该新增内容扩展了参数列表中的规则,适用于数据集群中源字段和目标字段 dobj 的不同数据类型:
◾ 除了 c 类型的数据对象外,对于 n、p 或 x 类型的数据对象,目标字段可以比源字段长。
◾源字段类型为 

-类型的源字段可以读入 s、i 和 int8 类型的目标字段。
可将 -s 读入 i 和 int8 类型的目标字段(但负数处理不当)
-i 可以读入 int8 类型的目标字段 

◾ c 类型的源字段可导出为 string 类型的目标字段,x 类型的源字段可导出为 xstring 类型的目标字段。
◾ 如果涉及的组件是以相同方式设置的源结构或目标结构的最后一个组件,上述规则也同样适用。
◾在目标结构中,如果结构的其他设置方式相同,子结构也可以比源结构的子结构拥有更多的组件。多余的组件将提供类型友好的初始值。

REPORT ZTXYY_11131.
DATA: BEGIN OF f1,
  col1 TYPE string,
  BEGIN OF sub,
    col2 TYPE decfloat16,
  END OF sub,
  col3 TYPE I,
END OF f1.

DATA: BEGIN OF f2,
  col1 TYPE string,
  BEGIN OF sub,
    col2 TYPE decfloat16,
    col3 TYPE xstring,
  END OF sub,
  col4 TYPE I,
END OF f2.
F1-col1 = '1'.
F1-sub-col2 = '2'.
F1-col3 = '3'.
EXPORT para = f1 TO MEMORY ID 'HK'.
"SUBMIT ZTXYY_11130.
IMPORT para = f2 FROM MEMORY ID 'HK' ACCEPTING PADDING.
BREAK-POINT.

REPORT ZTXYY_11130.
DATA: BEGIN OF f1,
  col1 TYPE string,
  BEGIN OF sub,
    col2 TYPE decfloat16,
  END OF sub,
  col3 TYPE I,
END OF f1.

DATA: BEGIN OF f2,
  col1 TYPE string,
  BEGIN OF sub,
    col2 TYPE decfloat16,
    col3 TYPE xstring,
  END OF sub,
  col4 TYPE I,
END OF f2.

IMPORT para = f2 FROM MEMORY ID 'HK' ACCEPTING PADDING.
BREAK-POINT.

针对数据簇中源字段和数据簇中源字段 dobj 的不同数据类型,该新增内容扩展了参数_列表中的规则。规则扩展的目的是,在结构类型相同的情况下,如果最高级别的源结构比数据簇中的目标结构有更多的组件,则多余的组件将被删除。源结构的子结构不得比目标结构中相应的子结构有更多的组件。

REPORT ZTXYY_11131.
DATA: BEGIN OF f1,
  col1 TYPE string,
  BEGIN OF sub,
    col2 TYPE decfloat34,
  END OF sub,
  col3 TYPE I,
  col4 TYPE xstring,
END OF f1.

DATA: BEGIN OF f2,
  col1 TYPE string,
  BEGIN OF sub,
    col2 TYPE decfloat34,
  END OF sub,
  col3 TYPE I,
END OF f2.
F1-col1 = '1'.
F1-sub-col2 = '2'.
F1-col3 = '3'.
F1-col4 = '4'.
EXPORT para = f1 TO MEMORY ID 'HK'.
IMPORT para = f2 FROM MEMORY ID 'HK' ACCEPTING TRUNCATION.
BREAK-POINT.

这一补充扩展了参数列表中的规则,适用于数据簇中源字段和数据簇中目标字段 dobj 的不同数据类型。在结构体中,这将产生(微不足道的)不同的设置,差异来自子结构或其他结构体中带有 INCLUDE 语句的各种应用组件。

源结构和目标结构的组件在同一层面上查看,与继承自子结构或使用 INCLUDE 应用的组件的设置无关。子结构造成的任何对齐间隙都无关紧要。

此新增功能不能与新增功能 “ACCEPTING PADDING ”和 “ACCEPTING TRUNCATION ”同时使用。

DATA: BEGIN OF incl_struc,
  cola TYPE string,
  colb TYPE I,
END OF incl_struc.

DATA: BEGIN OF f1.
  INCLUDE STRUCTURE incl_struc.
  DATA:  col1 TYPE string,
  BEGIN OF sub,
    col2 TYPE decfloat16,
    col3 TYPE decfloat34,
  END OF sub,
  col4 TYPE I,
END OF f1.

DATA: BEGIN OF f2,
  cola TYPE string,
  colb TYPE I,
  col1 TYPE string,
  BEGIN OF sub,
    col2 TYPE decfloat16,
  END OF sub,
  col3 TYPE decfloat34,
  col4 TYPE I,
END OF f2.
F1-col1 = '1'.
F1-cola = '1'.
F1-colB = '1'.
F1-sub-col2 = '2'.
F1-sub-col3 = '3'.
F1-col4 = '4'.


EXPORT para = f1 TO MEMORY ID 'HK'.
IMPORT para = f2 FROM MEMORY ID 'HK'
IGNORING STRUCTURE BOUNDARIES.
BREAK-POINT.

 ​​​​​​​

 源字段的内容不会转换为目标系统的代码页,而是保留不转换,并传递给目标字段。单个源字段或类型为 c 的结构组件可以分配给单个目标字段或类型为 x 的结构组件,其长度以字节为单位相同。c 类型的目标字段将忽略该加法。
该加法不能与之前的转换加法一起使用。

该新增功能将导出数据的代码页 ID 分配给数据对象 cp。该对象必须具有类字符数据类型。代码页 ID 是数据库表 TCP00 中 CPCODEPAGE 列的内容。

 ​​​​​​​

该附加功能将导出数据字节序的 ID 分配给数据对象ENDIAN,ENDIAN 必须具有 ABAP 类型组中的 ABAP_ENDIAN 数据类型。大字节序的 ID 是 “B”,小字节序的标识是 “L”。

REPORT ZTXYY_11131.
DATA: BEGIN OF f1,
  col1 TYPE C LENGTH 10 VALUE '1234567890',
  col2 TYPE C LENGTH 10 VALUE '1234567890',
END OF f1.

DATA: BEGIN OF f2,
  col1 TYPE C LENGTH 10,
  col2 TYPE X LENGTH 20,
END OF f2.

DATA: CP TYPE string,
      en TYPE abap_endian.

EXPORT para = f1 TO DATABASE demo_indx_table(hk) ID 'HK'.
IMPORT para = f2 FROM DATABASE demo_indx_table(hk) ID 'HK'
IN CHAR-TO-HEX MODE
CODE PAGE INTO CP
ENDIAN INTO en.
BREAK-POINT.

FREE MEMORY.只能对没有缓冲区或表的用

FREE MEMORY ID id.只能对没有缓冲区或表的用

删除成功sy-subrc = 0.失败则为4 

DATA: id    TYPE c LENGTH 4 VALUE 'TEXT', 
      text1 TYPE string     VALUE 'Tina', 
      text2 TYPE string     VALUE 'Mike'. 

EXPORT p1 = text1 
       p2 = text2 TO SHARED BUFFER demo_indx_table(XY) ID id. 

IMPORT p1 = text2 
       p2 = text1 FROM SHARED BUFFER demo_indx_table(XY) ID id. 

... 

DELETE FROM SHARED BUFFER demo_indx_table(XY) ID id. 

IMPORT p1 = text2 
       p2 = text1 FROM SHARED BUFFER demo_indx_table(XY) ID id. 

ABAP Memory/SAP Memory/Shared Buffer/Database

ABAP提供了IMPORT/EXPORT 和 SET/GET PARAMETER语句,可对用户内存/服务器内存/数据库进行存储和访问。不过可能很多人对此还不是很了解,下面我们通过实例来测试它们的区别和联系。

1. ABAP Memory

用户登陆后,最多一个系统可以开6个窗口,这在SAP中称为External Mode。

而同一个窗口中,运行某程序后,可以通过CALL TRANSACTION/SUBMIT或其他代码跳转到其他程序,这个称为Internal Mode。Internal Mode的调用栈最多为9层。

那么ABAP Memory,它是属于Internal Mode间可以共享的数据,而External Mode间无法共享。

例子. 创建程序A,输入:

DATA matnr TYPE matnr.

IMPORT matnr FROM MEMORY ID 'YTEST_MATNR'.

WRITE matnr.

创建程序B,输入:

DATA matnr TYPE matnr.
matnr = '000000000000001234'.
EXPORT matnr TO MEMORY ID 'YTEST_MATNR'.

SUBMIT y_program_a. "调用程序A

直接运行B,发现程序A从ABAP Memory读到了值并输出到LIST.

说明:

(1)调试运行B到EXPORT语句后面,Goto-System Area-ABAP Memory,可以查看到名为YTEST_MATNR的一片内存。

(2)如果B和A运行在不同的窗口,则A将访问不到数据;当用户输入/N退出当前程序时,内存值也将被清空。

(3)该语句适用于CALL TRANSACTION/SUBMIT过程中的数据共享,也常用于User Exit,类似于定义全局变量的效果。

2. SAP Memory

上面说了External Mode,那么它们之间共享数据必须通过SET/GET PARAMETER语句,不再是EXPORT/IMPORT的模式。

例子. 创建程序A,输入:

DATA matnr TYPE matnr.

GET PARAMETER ID 'YTEST' FIELD matnr.

WRITE matnr.

创建程序B,输入:

DATA: matnr TYPE matnr.
matnr = '000000000000012345'.
SET PARAMETER ID 'YTEST' FIELD matnr.

在窗口1运行程序B并关闭后,在窗口2运行程序A,发现程序A仍然读到了SAP Memory的值。

说明:

(1)调试时,可通过Goto-System Area-SAP Memory,查看到YTEST及其对应的值。

(2)SET/GET PARAMETER的值与本次登陆有关,当用户注销后才失效。在用户登陆的时候,系统会根据每个用户User Profile-Own Data-Parameter(事务码SU01)下的设置,载入到SAP Memory。

(3)Data Element中可以看到Further Characteristics下可定义PARAMETER ID,代表该字段作为屏幕元素时,可读取该PARAMETER ID作为默认值。比如VA03会自动显示刚刚创建的订单号。

3. SHARED MEMORY/SHARED BUFFER

前面介绍的都是用户内存,那么不同用户间如何实现数据共享呢?可以用SHARED MEMORY或SHARED BUFFER,它们是服务器上的某片所有用户共享的内存。关于SHARED MEMORY和SHARED BUFFER的区别,可以F1查看帮助。如果EXPORT SHARED BUFFER,则必须IMPORT SHARED BUFFER才能读到,用IMPORT SHARED MEMORY是读不到的。反过来也是。

例子. 创建程序A,输入:

DATA matnr TYPE matnr.

IMPORT matnr FROM SHARED BUFFER indx(aa) ID 'YTEST_MATNR'.

WRITE matnr.

创建程序B,输入:

DATA: matnr TYPE matnr.
matnr = '000000000000123456'.
EXPORT matnr TO SHARED BUFFER indx(aa) ID 'YTEST_MATNR'.

先在用户1的电脑上运行程序B,然后在用户2的电脑上运行程序A,发现用户2可以读取到值。

说明:

(1)既然是服务器上的所有用户共享空间,那么该值将保存到服务器关机重启为止,除非用户用DELETE语句清除它。其实这个跟ENQUEUE/DEQUEUE有点相似之处。

(2)数据库也可共享数据,不过服务器共享肯定速度快些,理论上适合网络游戏,呵呵。

(3)INDX是系统中存在的符合特定格式要求的表。但这不代表该EXPORT/IMPORT语句将在表INDX中增加记录,仅仅代表服务器借用了INDX的结构来管理该片共享内存。

4. DATABASE

上面说了SHARED BUFFER并不访问数据库,而要访问数据库就应该用DATABASE。

创建一个程序,录入代码:

DATA: matnr TYPE matnr.
matnr = '000000000000004321'.
EXPORT matnr TO DATABASE indx(aa) ID 'YTEST_MATNR'.

执行程序,然后SE16查看表INDX,发现新增了一条RELID = AA, SRTFD = YTEST_MATNR的记录。如果EXPORT的数据量比较大,则新增的将是多条,这些条目的字段值SRTF2从0递增。所以EXPORT DATABASE与普通数据库操作的不同之处是,它适合大数据量的操作,系统自动将其拆分成多条记录并存储到数据库中,比如图片或文档。而用IMPORT DATABASE的过程则相反,系统将把这些条相关记录又自动组合起来成为一个整体。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring Boot-SpringBoot怎么实现自动配置】

目录 什么是Spring Boot自动配置 自动配置中需要的重要注解 一.Condition 二.Enable 三.EnableAutoConfiguration 实现一个自定义starter 什么是Spring Boot自动配置 SpringBoot的自动配置简单来说就是当spring容器启动后&#xff0c;一些配置类、bean对象就自动存入到了…

Python新手入门指南:从零开始学编程

欢迎来到Python的世界&#xff01;Python是一种功能强大、易于学习且用途广泛的编程语言。无论你是完全没有编程经验的新手&#xff0c;还是想要学习新技能的开发者&#xff0c;Python都是一个非常好的起点。接下来&#xff0c;我们将一起踏上这段编程之旅&#xff0c;从基础语…

机器学习第十一章-特征选择与稀疏学习

11.1子集收集与评价 属性称为"特征" &#xff0c;对当前学习任务有用的属性称为"相关特征" 、没什么用的属性称为"无关特 征" . 从给定的特征集合中选择出相关特征于集的过程&#xff0c;称为"特征选择"。 特征选择是一个重要的"…

Linux系统中的弹性计算功能

在当今数字化时代&#xff0c;弹性计算已经成为信息技术领域的重要概念之一。弹性计算指的是根据需要自动调整计算资源&#xff0c;以满足应用程序的需求。这种灵活性和自适应性使得弹性计算成为了云计算、大数据、人工智能等领域的核心技术之一。在这个领域中&#xff0c;Linu…

嵌入式软件--数电基础 DAY 4

1.SR锁存器 1》四种状态&#xff1a; S R Q Q set状态&#xff1a; 0 1 1 0 Reset状态&#xff1a; 1 0 0 1 维持状态&#xff1a; 1 1 维持上个状态 无意义状态…

VUE中出现Cannot find module ‘@/api/xxx.js‘ or its corresponding type declarations

在使用VSCode编写Vue程序时发现之前使用以下代码时却报出了错误 import {getEmployeeList} from /api/employee\ 保证文件地址正确且其中的方法也可以正常调用&#xff0c;只是报出了错误&#xff0c;该行代码上加入一个‘//ts-ignore’就可以解决。 修改后的代码 //ts-ig…

【mkdir rmdir】Centos/Linux mkdir rmdir命令详细介绍

【mkdir & rmdir】Centos/Linux mkdir & rmdir命令详细介绍 简介 mkdir rmdir 简介 mkdir 命令和 rmdir 命令是在 linux 当中比较常用的两个命令&#xff0c;这两个命令前者是创建空目录&#xff0c;后者是删除空目录。rmdir 命令的定位比较尴尬它的功能可以被 rm 命…

探索 Resolume Arena 7 - 引领 VJ 音视频创作的卓越软件

Resolume Arena 7 是一款专为 Mac 和 Windows 系统设计的强大 VJ 音视频软件&#xff0c;为创意专业人士和爱好者提供了丰富而出色的功能。 这款软件拥有直观且用户友好的界面&#xff0c;即使对于初学者来说&#xff0c;也能快速上手并开始创作。其强大的媒体管理功能&#x…

鸿蒙内核源码分析(物理内存篇) | 怎么管理物理内存

如何初始化物理内存? 鸿蒙内核物理内存采用了段页式管理&#xff0c;先看两个主要结构体.结构体的每个成员变量的含义都已经注解出来&#xff0c;请结合源码理解. #define VM_LIST_ORDER_MAX 9 //伙伴算法分组数量&#xff0c;从 2^0&#xff0c;2^1&#xff0c;...&a…

【JavaSec】反序列化初探(配合URLDNS)

JavaSec反序列化初探&#xff08;配合URLDNS&#xff09; 文章目录 JavaSec反序列化初探&#xff08;配合URLDNS&#xff09;基本demoMap入口类Java反射 基本demo 构建一个demo 实体类&#xff1a; package bli_seri;import java.io.Serializable;public class Person implem…

Crawlab 分布式部署指南:从 Scrapy 项目到单文件的全流程详解

crawlab分布式部署 远程服务器环境搭建 同之前gerapy分布式部署一样 添加服务器防火墙端口 redis&#xff1a;6379mysql&#xff1a;3306mogodb&#xff1a;27017scrapyd&#xff1a;6800crawlab&#xff1a;8080 访问crawlab服务&#xff1a;47.93.10.129 连接远程数据库 …

Unity Dots学习 (一)

先学习怎么使用&#xff0c;再研究底层代码。Dots大家都有所耳闻。一直没时间研究&#xff0c;最近研究一下 看上图可知&#xff0c;哪怕是CPU的第三级缓存也比内存要快2-5倍。 资料&#xff1a; 《DOTS之路》第零节——前导课(1)——DOTS的5W1H问题_哔哩哔哩_bilibili 《DOT…

javaweb的新能源充电系统pf

TOC springboot339javaweb的新能源充电系统pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域…

SVG中的paint-order属性实现文字描边

过去只支持 SVG 元素 paint-order&#xff0c;表示绘制的顺序。 对于一个图形的绘制&#xff0c;顺序还是非常重要的。例如用SVG来绘制一个带边框的矩形 <style>rect{fill: #FFE8A3;stroke: #9747FF;stroke-width: 4;} </style><svg viewBox"0 0 300 30…

XSS-DOM

文章目录 源码SVG标签Dom-Clobbringtostring 源码 <script>const data decodeURIComponent(location.hash.substr(1));;const root document.createElement(div);root.innerHTML data;// 这里模拟了XSS过滤的过程&#xff0c;方法是移除所有属性&#xff0c;sanitize…

[数据集][图像分类]波色绝缘子缺失分类数据集1440张2类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;1440 分类类别数&#xff1a;2 类别名称:["missing","norma…

轻量高效的ControlNet开源 | ControlNetXt:支持主流生成架构,可与LoRA无缝集成!

当前的可控生成方法如ControlNet、Adapaters和ReferenceNet等通常需要大量额外的计算资源&#xff0c;尤其是对于视频生成&#xff0c;并且在训练中面临挑战或表现出较弱的控制力。 对此&#xff0c;港中文提出了一种轻量级可控模块&#xff1a;ControlNeXt&#xff0c;这是一…

PCIe Linux MRRS和MPS参数设置策略

1.概述 MPS&#xff08;Max Payload Size&#xff09;和MRRS&#xff08;Max Read Request Size&#xff09;共同影响PCIe总线的传输效率。如果MPS和MRRS设置的过小&#xff0c;传输相同长度的数据&#xff0c;需要更多的TLP报文&#xff0c;导致PCIe总线传输效率降低&#xf…

PHP多项目多场景排队叫号系统源码

&#x1f514;&#x1f4c8;多项目多场景排队叫号系统&#xff0c;让等待也高效有序&#xff01; 一、告别无序等待&#xff0c;智能排队新风尚 你是否曾在医院、银行或政务大厅等地方&#xff0c;面对冗长的队伍感到无奈&#xff1f;多项目多场景排队叫号系统&#xff0c;正…

Mybatis的分页,延迟加载和缓存

目录 分页&#xff1a; 方式一&#xff1a;利用 limit 实现物理分页 利用limit的关键字分页 方式二&#xff1a;RowBounds集合逻辑分页 方式三&#xff1a;插件分页 延迟加载和立即加载&#xff1a; 什么是立即加载&#xff1a; 什么是延迟加载 延迟加载的配置 缓存&a…