【发布时间】:2013-10-19 06:12:51
【问题描述】:
我正在尝试编写一个简单的 java 实用程序,使用 JCo 将数据从 SAP 提取到 MySQL 数据库中。我已经了解了 JCo 文档并尝试了SAP help portal 中提到的相关示例,我能够从 Table 中检索数据并插入 MySQL DB。
我想要的是一种通过以下两种方式过滤数据的工具:
- 我只想获取必填字段。
- 我希望仅当特定字段的值与特定模式匹配时才获取行。
在做了一些研究之后,我没有找到任何方法来指定查询参数,以便它只检索过滤后的数据,它基本上查询表中的所有字段,我想我必须过滤掉我没有的数据'不想在我的 java 客户端层。如果我在这里遗漏了什么,请告诉我。
这是一个代码示例:
public static void readTables() throws JCoException, IOException {
final JCoDestination destination = JCoDestinationManager
.getDestination(DESTINATION_NAME2);
final JCoFunction function = destination.getRepository().getFunction(
"RFC_READ_TABLE");
function.getImportParameterList().setValue("QUERY_TABLE", "DD02L");
function.getImportParameterList().setValue("DELIMITER", ",");
if (function == null) {
throw new RuntimeException("BAPI RFC_READ_TABLE not found in SAP.");
}
try {
function.execute(destination);
} catch (final AbapException e) {
System.out.println(e.toString());
return;
}
final JCoTable codes = function.getTableParameterList().getTable(
"FIELDS");
String header = "SN";
for (int i = 0; i < codes.getNumRows(); i++) {
codes.setRow(i);
header += "," + codes.getString("FIELDNAME");
}
final FileWriter outFile = new FileWriter("out.csv");
outFile.write(header + "\n");
final JCoTable rows = function.getTableParameterList().getTable("DATA");
for (int i = 0; i < rows.getNumRows(); i++) {
rows.setRow(i);
outFile.write(i + "," + rows.getString("WA") + "\n");
outFile.flush();
}
outFile.close();
}
此方法尝试读取 SAP 存储元数据或数据字典的表,并将输出写入 csv 文件。这工作正常,但需要 30-40 秒并返回大约 40 万条记录,共 32 列。我的目的是询问是否有一种方法可以限制我的查询仅返回特定字段,而不是读取所有字段并在客户端层中丢弃它们。
谢谢。
【问题讨论】:
-
到目前为止你尝试过什么?请提供不起作用的代码的完整示例。
-
我尝试了SAP help portal 中提到的示例并探索了 API 详细信息,但我没有找到过滤数据的方法。
-
这不是一个完整的代码示例。