【问题标题】:Filtering fields in RFC_READ_TABLE with SAP JCo使用 SAP JCo 过滤 RFC_READ_TABLE 中的字段
【发布时间】:2013-10-19 06:12:51
【问题描述】:

我正在尝试编写一个简单的 java 实用程序,使用 JCo 将数据从 SAP 提取到 MySQL 数据库中。我已经了解了 JCo 文档并尝试了SAP help portal 中提到的相关示例,我能够从 Table 中检索数据并插入 MySQL DB。

我想要的是一种通过以下两种方式过滤数据的工具:

  1. 我只想获取必填字段。
  2. 我希望仅当特定字段的值与特定模式匹配时才获取行。

在做了一些研究之后,我没有找到任何方法来指定查询参数,以便它只检索过滤后的数据,它基本上查询表中的所有字段,我想我必须过滤掉我没有的数据'不想在我的 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 详细信息,但我没有找到过滤数据的方法。
  • 这不是一个完整的代码示例。

标签: java sap-basis jco


【解决方案1】:

这很好用:

JCoTable table = function.getTableParameterList().getTable("FIELDS");
table.appendRow();
table.setValue("FIELDNAME", "TABNAME");
table.appendRow();
table.setValue("FIELDNAME", "TABCLASS");

请查看Thread

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多