gpt4 book ai didi

memory - 在 ABAP session 之间传递结构化数据?

转载 作者:行者123 更新时间:2023-12-02 19:18:42 25 4
gpt4 key购买 nike

众所周知,ABAP内存(EXPORT/IMPORT)用于ABAP session 内部跨调用栈传递数据,而SAP内存(SET/GET)是 session 独立的,对用户 session 的所有ABAP session 有效。

这里的陷阱是 SET PARAMETER 只支持原始平面类型,否则会抛出错误:

"LS_MARA" must be a character-type field (data type C, N, D or T). by

全局赋值,如ASSIGN '(PrgmName)Globalvariable' TO FIELD-SYMBOLS(<lo_data>).并不总是一种方式,例如,如果想要将结构传递给某个本地方法变量。

创建 SHMA 共享内存对象对于简单的测试任务来说似乎有点矫枉过正。

到目前为止我只找到了this ancient thread是否提出了问题,但那里的解决方案是愚蠢的,代表了一个完美的例子,说明你不应该如何编写,一个完美的反模式。

如果我们想将结构或表传递给另一个 ABAP session ,我们有什么选择(数据库除外)?

最佳答案

像往常一样,桑德拉有一个很好的答案。

Export/Import To/From Shared buffer/Memory 非常强大。但是请明智地使用它并确保您了解它位于 1 个应用程序服务器上并且是非持久性的。如有必要,您可以使用 rfc 调用其他应用程序服务器以从其他服务器获取缓冲区。调用函数 xyz 目标 ''

参见函数 TH_SERVER_LIST 。即您在 SM59 内部连接中看到的内容。

显然,缺乏共享缓冲区/内存的持久性是关键考虑因素。但是,除非您仔细阅读文档,否则共享缓冲区管理器将如何根据缓冲区大小和可用内存放弃条目是不会立即显而易见的。您不能假设共享缓冲区条目在您访问它时就在那里。它很可能会,但它可以被“删除”,服务器可能会重新启动等。将它用作性能帮助工具,但始终假设该条目可能不存在。共享内存与共享缓冲区不同,存在上限问题,需要在添加更多条目之前丢弃其他条目。两者各有利弊。

在 St02 中,在此处查找红色条目,已达到缓冲区限制。 enter image description here查看当前参数按钮,它告诉您需要更改哪些配置文件参数。

此语言元素的一个重要用途是用于日志记录或用于可以重建的数据的高性能缓冲。它也非常适合 badis 等场景,如果你不能提交。您可以在不发出提交或数据库提交的情况下“保留”信息。您甚至可以在不使用锁定的情况下更新/存储您的日志。使用简单的原理当前工作进程没有。是独一无二的。

 CALL FUNCTION 'TH_GET_OWN_WP_NO'
IMPORTING
wp_index = wp_index.

使用索引号作为数据键的一部分。

如果您的内核是 7.40 或更高版本,请参阅类 CL_OBJECT_BUFFER否则参见函数 SBUF_OBJ_SHOW_OBJECT

享受共享缓冲区/内存带来的乐趣。与共享内存对象相比,共享缓冲区的一大优势是 ABAP 垃圾收集器。 SAPSYS 垃圾收集会咬你一口!

关于memory - 在 ABAP session 之间传递结构化数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63341769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com