【发布时间】:2020-05-23 15:14:44
【问题描述】:
什么是序列化有关 SAP RFC 函数模块参数(即参数名称和参数值)的信息的最佳方式杰科?
关键是序列化应该在 Jco(使用 Java)中完成,然后这些数据将被发送回 SAP 并保存在 SAP 中的 Z-Table 中,以便稍后在 SAP Table 中使用这些条目可以在 ABAP 中“重新序列化”这些数据,并使用完全相同的参数和值再次调用给定的函数。
为了便于理解,我举个例子:
第 1 步。 我们在 ABAP 中调用 RFC FM:
CALL FUNCTION 'remotefunction'
DESTINATION jco_server
EXPORTING e1 = exp1
* IMPORTING i1 =
TABLES t1 = tab1.
第 2 步。 我们在 Jco 中捕获这个函数调用,需要将调用该函数的参数信息序列化并保存在 SAP 表中,例如:
String ImportParList = function.getImportParameterList().toXML().toString(); //serialization of import parameters
String ExportParList = function.getExportParameterList().toXML().toString(); //serialization of export parameters
String TableParList = function.getTableParameterList().toXML().toString(); //serialization of table parameters
String ParList = ImportParList + ExportParList + TableParList;
//Call function to save content of variable "ParList" in a SAP table
第 3 步。 使用 ABAP,我们需要从 SAP 表中选择数据并“重新序列化”(例如,在 ABAP 中使用 CALL TRANSFORMATION FM),以便能够再次调用 FM“remotefunction”与之前相同的参数和值。
总结一下:
A. Jco 中是否有任何标准的 Java 方法可用于此类序列化(比手动将其转换为 xml/JSON 并保存为字符串更好)?
B. 如何处理深层 ABAP 结构,例如后续表嵌套在哪些表中?也像其他的一样将其转换为 XML/JSON?
C.您是否有任何其他想法可以比我提出的更好地执行此过程?
提前致谢!
【问题讨论】:
-
这是一个棘手的任务,你为什么需要这个?如果您想使用相同的参数调用 FM 循环,您可以仅在 SAP 端执行此操作,有standard tools 用于此。将此任务分成两个环境(Java+SAP)会带来很多复杂性,但没有真正的收获
-
确实如此。但是当我们在 SAP 中调用 FM 时,如果目标没有响应或其他不正确(结果出现 SAP 中的转储),我需要它,在这种情况下,我们可以将此调用重定向到 SAP JCO 为目的地(没有转储),然后我可以将来自该调用的日志保存在 SAP 表中,并稍后为原始目的地使用相同的参数和值重试。我知道这似乎有点复杂:)
-
为什么不在AS ABAP中直接序列化参数呢?使用您的方法,您首先将参数传递给 Rfc 函数 (AS ABAP)。 2.你在你的Java程序中序列化它。 3.你将序列化后的内容传递给 AS ABAP 进行存储。