什么是最好的方式来序列化SAP RFC功能模块参数信息(即参数名称和参数值),在SAP中调用该功能(参数'DESTINATION'提供为SAP JCO SERVER),然后在JCo中捕获?
关键是序列化应该在Jco中完成(使用Java),然后这些数据将被送回SAP并保存在SAP的Z-表中,这样以后使用SAP表中的这些条目就可以在ABAP中 "重新序列化 "这些数据,并以完全相同的参数和值再次调用给定的funcion。
为了使它更容易理解,我将给出一个例子。
第一步. 我们在ABAP中调用RFC FM。
CALL FUNCTION 'remotefunction'
DESTINATION jco_server
EXPORTING e1 = exp1
* IMPORTING i1 =
TABLES t1 = tab1.
第二步: 我们在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
第三步: 使用ABAP,我们需要从SAP表中选择数据并 "重新序列化"(例如,在ABAP中使用CALL TRANSFORMATION FM),以便能够再次调用FM "remotefunction",其参数和值与之前相同。
综上所述。
A. 在Jco中是否有任何标准的Java方法可以实现这样的序列化(比手动将其转换为xmlJSON并保存为String更好)?
B. 如何处理深层的ABAP结构,比如后续表是嵌套的表?也和其他的表一样转换为xmlJSON吗?
C. 你有什么其他的想法,如何比我介绍的更好地执行这个过程?
先谢谢你!
我在这里所描述的可能不适合你,由于安装和设置的复杂性,但只是为了使用其他社区成员和承认这种功能的存在。
SAP有一个 特别框架 用于启用你想要的情况下,称为LOWGWIN(LOGCOM 200)。安装说明在 SAP 1870371号说明.
功能集的细节。
通过记录RFCs,可以确定哪些用户在什么时间点可以访问哪些数据。例如,您可以记录RFC功能模块(FM)级别的数据。
参数类型
参数名称及相应数值
为了最大限度地减少记录的数据量,您可以采取以下措施。
限制某些用户的记录
过滤需要记录的参数,然后再将其包含在日志记录中。
只为您要记录的RFC功能模块启用客户端级别的日志记录。
您可以通过BAdI微调哪些RFC调用(模块)会被记录,包括成功或失败的调用。/LOGWIN/BADI_RFC_LOG_FILTER
.
最初,日志暂时存储在SAP中,并可通过事务处理查看 /LOGWIN/SHOW_LOG
之后,您可以通过事务处理将必要的日志记录转移到外部存储库(您需要提前设置)。/LOGWIN/TSF_TO_EXT
.
架构概述。
所以你可以在Java存储中设置外部仓库,或者保持原样,从SAP中读取参数值,之后你可以从SAP或Java端重新运行失败的模块。
另外,还有一大堆关于数据归档、用户权限、排除、映射等设置,由于篇幅太大,无法在答案中描述。
更多的文档在这里。
> Software Downloads > Installations and Upgrades > A–Z Index > L > LOGGING OF RFC AND WEB SVCS 2.0