为 S4 创建 JCoFunction 时出现未知类型

Unknown type when creating JCoFunction for S4

提问人:Ram 提问时间:4/5/2023 最后编辑:SuncatcherRam 更新时间:8/23/2023 访问量:122

问:

我在为系统的 BAPI 创建对象时出现以下错误。但是,我能够为系统创建对象。JCoFunction"SWNC_STATREC_READ_INSTANCE"S/4HANAR/3

java.lang.IllegalArgumentException: Unknown type -1 when trying to add field MESSAGE_ID to record [Ljava.lang.String;@42c4641f
    at com.sap.conn.jco.rt.AbstractMetaData.add(AbstractMetaData.java:256)
    at com.sap.conn.jco.rt.DefaultRecordMetaData.add(DefaultRecordMetaData.java:363)
    at com.sap.conn.jco.rt.AbapRepository$DDICHelper.constructMetaData(AbapRepository.java:2889)
    at com.sap.conn.jco.rt.AbapRepository$DDICHelper.constructMetaData(AbapRepository.java:2734)
    at com.sap.conn.jco.rt.AbapRepository$DDICHelper.constructMetaData(AbapRepository.java:2824)
    at com.sap.conn.jco.rt.AbapRepository$DDICHelper.queryRecordMetaData(AbapRepository.java:2421)
    at com.sap.conn.jco.rt.AbapRepository.queryRecordMetaData(AbapRepository.java:1108)
    at com.sap.conn.jco.rt.AbapRepository.queryRecordMetaData(AbapRepository.java:703)
    at com.sap.conn.jco.rt.AbapRepository.getRecordMetaData(AbapRepository.java:929)
    at com.sap.conn.jco.rt.AbapRepository$DDICHelper.queryFunctionTemplate(AbapRepository.java:2110)
    at com.sap.conn.jco.rt.AbapRepository.queryFunctionTemplate(AbapRepository.java:1044)
    at com.sap.conn.jco.rt.AbapRepository.queryFunctionTemplate(AbapRepository.java:623)
    at com.sap.conn.jco.rt.AbapRepository.getFunctionTemplate(AbapRepository.java:885)
    at com.sap.conn.jco.rt.BasicRepository.getFunction(BasicRepository.java:163)
    at com.grc.riskanalysis.util.SAPUtil.getReportTypeTxns(SAPUtil.java:1201)

下面是用于创建对象的 Java 代码:JCoFunction

final JCoDestination destination = getDestination(sapSystemVO.getDestinationName().trim());
            JCoFunction function = destination.getRepository().getFunction("SWNC_STATREC_READ_INSTANCE");

有没有其他方法可以为S/4HANA系统的BAPI创建对象?

用户在S/4HANA中创建对象需要任何额外的授权?JCoFunction

JCO S4HANA

评论


答:

3赞 3 revsSandra Rossi #1

该问题与 R/3 或 S/4HANA 无关,而是与从 JCo 调用的启用 RFC 的函数模块的参数中使用“最新”ABAP 类型(int8、UTCLONG 等)有关,即,如果 JCo 程序的参数接口不引用最新的 ABAP 类型,则使用旧的 S/4HANA 版本,可以成功调用。SWNC_STATREC_READ_INSTANCE

解决方案:安装并使用最新的 JCo 库。

参考(取决于 JCo 版本):

编辑:参考了在trixx评论后编辑的关于不同JCo风格的注释。

评论

1赞 Ram 4/8/2023
谢谢。它与最新的JCO库一起使用。此最新版本要求在 Windows 服务器上安装 Visual Studio 2013 运行时库。
1赞 Trixx 4/17/2023
@Sandra:您的答案和解决方案是正确的,但请记住,列出的 SAP 注释仅指 NetWeaver AS Java 中的嵌入式 JCo 库。对于 JCo 独立连接器,SAP 会发布引用其软件组件“SAP JCO”的特定注释,例如注释 2531996
1赞 Sandra Rossi 4/17/2023
@Trixx谢谢,我没有意识到。还添加了编辑的答案和其他参考资料,使其成为更好的答案。
0赞 Trixx 4/17/2023
@Sandra:你非常尽职尽责,值得你的高分。:)从 3.1.2 版开始,JCo 独立版添加了 utclong 支持(可以在 SDK 附带的 releasenotes.html 中看到)。但是,由于这是 JCo 3.1 的第一个 GA 版本,因此在这种特殊情况下,似乎不存在针对此补丁级别的特定 SAP 说明。