过滤SAP Java Connector中的记录

时间:2013-10-19 06:12:52

标签: java sap jco

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

我希望拥有以下两种方式过滤数据的工具:

  1. 我想只获取必填字段。
  2. 我想仅在特定字段的值与特定模式匹配时才获取行。
  3. 在做了一些研究后,我没有找到任何方法来指定查询参数,以便它只检索过滤后的数据,它基本上查询表中的所有字段,我想我必须过滤掉我不知道的数据我想要在我的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秒,并返回大约4万条记录,32列。我的目的是询问是否有一种方法可以限制我的查询仅返回特定字段,而不是读取所有字段并在客户端层中丢弃它们。

    感谢。

1 个答案:

答案 0 :(得分:0)

这很好用:

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

请检查此Thread

感谢。