【问题标题】:Serialization of RFC parameters in JCoJCo中RFC参数的序列化
【发布时间】: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 进行存储。

标签: java abap saprfc jco


【解决方案1】:

由于安装和设置的复杂性,我在此处描述的内容可能不适合您,但只是为了供其他社区成员使用并确认存在此类功能。

SAP 有一个special framework 用于启用所需的情况,称为 LOWGWIN (LOGCOM 200)。安装说明在SAP Note 1870371

功能集的详细信息:

RFC 的日志记录允许您确定哪些用户有权访问 在什么时间点有哪些数据。您可以在 RFC 函数上记录数据 模块(FM)级别,例如:

  • 参数类型

  • 参数名称及对应值

为了尽量减少记录的数据量,您可以执行以下操作:

  • 仅限某些用户登录

  • 过滤需要记录的参数才包含在日志记录中

  • 仅为 RFC 功能模块启用客户端级别的日志记录 你想登录

您可以微调将记录的 RFC 调用(模块),包括 BAdI /LOGWIN/BADI_RFC_LOG_FILTER 成功或失败的调用。

日志最初暂时存储在SAP中,可以通过事务/LOGWIN/SHOW_LOG查看,之后您可以通过事务/LOGWIN/TSF_TO_EXT将必要的日志记录传输到外部存储库(您应该提前设置)。

架构概述:

因此您可以在 Java 存储中设置外部存储库或保持原样并从 SAP 读取参数值,之后您可以从 SAP 或 Java 端重新运行失败的模块。

此外,还有很多关于数据存档、用户权限、排除、映射等的其他设置,这些设置太大而无法在答案中描述。

更多文档在这里:

还要查看注释18703711878916

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多