使用 jCo(3.x)) 访问 SAP table 时获取无数据

Getting No data when accessing SAP table with jCo(3.x))

这是我的示例 code.In 这个示例只有基本类型,没有结构类型 set.But 在输出中 table 中不存在任何数据。

当我检查 SAP 中的记录时,它包含这个特定的多个记录id.Can有人向我解释一下吗?

public void invokeRFC(JCoDestination destination) {

    JCoFunction function=null;
    try

    {
        JCoFunctionTemplate functionTemplate = destination.getRepository().getFunctionTemplate("RFC_METHOD");

        if (functionTemplate != null) {
            function = functionTemplate.getFunction();
        }

        if (function == null)
            throw new RuntimeException("Not found in SAP.");

        //to fill elementary types and structures
        configureImportParameters(function,"xxx",  "abc");
        //to fill table type parameters
        configureTableParameters(function, "tblName",1,"100");
        function.execute(destination);


    } catch (JCoException e)
    {
        e.printStackTrace();
    }

}

public void configureTableParameters(JCoFunction function, String table_name, int index, String id) {
    JCoTable table = function.getTableParameterList().getTable("table_name");

    table.appendRow();
    table.setRow(index);
    table.setValue("Partner", "100");

}

private void exportTable(JCoFunction jCoFunction, String tblName) {
    JCoTable resultTable = jCoFunction.getTableParameterList().getTable(tblName);

    int value = resultTable.getNumRows();
    System.out.println(value);
}

private void configureImportParameters(JCoFunction function, String param1, String param2) {

    JCoParameterList parameterList = 
    function.getImportParameterList();
    parameterList.setValue("field1", param1);
    parameterList.setValue("field2", param2);

}

更新了代码。

首先通过事务代码 SE37 使用 SAP GUI 测试您的 ABAP 远程功能模块。 如果此测试成功并且使用相同的参数值从 JCo 调用时得到不同的结果,那么我建议研究 SAP 注释 206068 可能的原因。

同时检查您的方法 configureTableParameters。我想,index 应该是一个字段索引而不是行数。您的实施将创建太多不必要的行。我假设您想调用 table.appendRow(); 而不是 table.appendRows(index);。此外,您可能打算用值 "100" 填充行中的第一个字段,在这种情况下,您必须为此传递索引值 0 而不是 1

多个问题可能导致此问题。

  1. 如果您将“”或“”设置为字段。 (当你设置值时,如果有一些值

  2. 如果它说合作伙伴不存在,如果你确定它存在,这意味着你的数据没有正确传递。将调试点添加到设置数据的位置,并确保传递正确的名称和正确的值。

  3. 你也不需要添加(索引)你可以 table.appendRow(); // 但这不会影响你的情况

  4. 此外,当您设置值时,请确保其已归档。 (通常不是)在你给出的例子中它的 int

例如:

private void configureTableParameters(JCoParameterList tableParameters){
    JCoTable jCoTable=tableParameters.getTable(key);
    jCoTable.appendRow();
    if(value!=null)
    jCoTable.setValue(fieldKey,String.valueOf(value));

}

这只是 psuda 代码,不会起作用