[英]Unique ID for every RFC call
我在外部调用一些 RFC 模块,它调用其他模块并在调用堆栈中计算一些值并将其保存到 memory,然后最后读取该值并返回给外部调用者。 每次计算可能不同,因此我们需要相应地读取 memory 区域。
目前病例的并发症有:
这个想法是写入 memory,其 ID 仅对当前呼叫唯一,而不是以前的呼叫,即 memory 中的值将始终相关。
让我用我创建的这个简单的 FM 来说明这个案例。 只有在当前调用中设置了该值,该模块才会返回该值,即只有相关的一个。
FUNCTION Z_MEM.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" EXPORTING
*" VALUE(E_PAR) TYPE CHAR50
*"----------------------------------------------------------------------
DATA id LIKE sy-timlo.
IMPORT id FROM MEMORY ID 'MAN'.
IF id IS INITIAL.
id = sy-timlo.
EXPORT id TO MEMORY ID 'MAN'.
e_par = id.
ENDIF.
ENDFUNCTION.
我从外部循环测试了 20 次,得到:
>>> 154251
...
>>>
因此,memory 按预期重用,所有进一步的运行可能会消耗错误的值。
我在这里看到的可能的解决方案:
是否有唯一标识 RFC 调用的标准方法? 也许是一些SY
领域?
评论中的想法很有用,但在我的情况下无法实现。
是的,我可以生成 GUID,但问题在于将 memory 读/写到同一 ID 的方式。 将值写入 memory 的包含模块位于调用堆栈的深处,并且 READ 是在 RFC FM 主体中进行的,因此要从相同的 memory ID 读取/写入值,我应该已经通过在 RFC 生成的 GUID入口点(调用堆栈的根级别)到调用堆栈的第 10 层嵌套,这显然是不可能的,或者至少我没有找到方法。
这就是我解决问题的方法。 我找到了一个完全符合我需要的 FM
CALL FUNCTION 'TH_GET_SESSION_ID'
IMPORTING
session_id = id.
我用外部调用运行了一些测试,可以确认 FM 生成的 ID 在整个 RFC 调用中是持久的,但在调用之间是不同的。
SY-MODNO
的值对于跟踪SUBMIT
的程序很有用。
https://answers.sap.com/questions/627157/how-could-i-create-unique-memory-id.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.