gpt4 book ai didi

JAVA sapjco3 无法从返回的表中找到数据

转载 作者:行者123 更新时间:2023-11-30 10:18:48 24 4
gpt4 key购买 nike

我有一个名为 ZRFC_BOM_005 的 SAP RFC。执行 RFC 函数后,我尝试从返回的表中获取字段的值,但它只显示字段的名称而没有显示字段的值。但是,函数“printJCoTable(JCoTable jcoTable)”可以与其他 RFC 一起正常工作。我不知道这里有什么问题。

这是我的代码:

执行 SAP RFC:

    JCoFunction function = destination.getRepository().getFunction("ZRFC_BOM_005");             
JCoParameterList input = function.getImportParameterList();
input.setValue("DATE_FROM", datefrom);
input.setValue("DATE_TO", dateto);
input.setValue("I_CAPID", i_capid);
input.setValue("I_MEHRS", i_mehrs);
input.setValue("I_MTNRV", i_mtnrv);
input.setValue("I_STLAN", i_stlan);
input.setValue("I_WERKS", i_werks);
if (function == null)
throw new RuntimeException("ZRFC_BOM_005 not found in SAP.");
try {
function.execute(destination);
} catch (AbapException e) {
System.out.println(e.toString());
}
JCoTable table = function.getTableParameterList().getTable("T_BOMITEM");
printJCoTable(table);

使用 printJCoTable 打印表的字段和表的值:

public static List<List<String>> printJCoTable(JCoTable jcoTable) {
List<List<String>> listData = new ArrayList<List<String>>();
// header
// JCoRecordMeataData is the meta data of either a structure or a table.
// Each element describes a field of the structure or table.
JCoRecordMetaData tableMeta = jcoTable.getRecordMetaData();
for (int i = 0; i < tableMeta.getFieldCount(); i++) {
System.out.print(String.format("%s\t\t", tableMeta.getName(i)));
}
System.out.println(); // new line

// line items
for (int i = 0; i < jcoTable.getNumRows(); i++) {
// Sets the row pointer to the specified position(beginning from zero)
jcoTable.setRow(i);
// Each line is of type JCoStructure
List list = new ArrayList<>();
for (JCoField fld : jcoTable) {
list.add(fld.getValue());
System.out.print(String.format("%s\t", fld.getValue()));
}
listData.add(list);
System.out.println();
}
return listData;
}

但结果只有字段名,没有字段值。

PS:我确定返回字段的值与我输入的参数相同,因为我已经用另一个链接到 SAP 的软件检查过它。

有没有可能是超时问题?因为当我执行此 RFC 时,运行大约需要 10 分钟。

那我该如何解决呢?

最佳答案

正如您评论说 jcoTable.getNumRows() 返回 0:
这意味着该表为空,如果您尝试访问该表的任何内容字段,则 JCo 异常错误消息是正确的。因此,您的 RFC 调用返回此空表,这意味着您的输入参数值似乎不包含您期望的数据。再次检查它们。

我猜你的 DATE_FROM 和 DATE_TO 参数设置错误。将 java.util.Date 对象放在那里,或者如果 datetodatefrom 必须是字符串,则选择日期格式 yyyyMMddyyyy-MM-dd 表示他们的内容,即今天的日期为“20180319”或“2018-03-19”。

如果不是那么容易,它也可能是外部到内部表示转换导出例程的东西,这些例程由事务 SE37 自动调用和使用,但如果直接从外部调用支持 RFC 的功能模块则不会。有关此问题和该领域其他问题的更多详细信息,我建议研究 SAP 说明 206068 .

您可以使用 ABAP 调试器工具检查这两种情况,以查看通过 SE37 调用您的功能模块与通过您的 JCo 程序调用相比,哪些输入参数值真正传递。

关于JAVA sapjco3 无法从返回的表中找到数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49047066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com