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

时间:2018-11-30 06:36:15

标签: java spring-boot sap jco

这是我的示例代码。在此示例中,只有基本类型,无需设置结构类型。但是在输出中,表中没有数据。

当我检查SAP中的记录时,它包含该特定ID的多个记录,有人可以向我解释吗?

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);

}

更新了代码。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

  1. 如果您将“”或“”设置为字段。 (当您设置值时最好设置是否有一些值

  2. ,如果说伙伴不存在,并且您确定存在,则表示您的数据无法正确传递。在设置数据的位置添加调试点,并确保传递正确的名称和正确的值。

  3. 也不需要添加(index),只需table.appendRow(); //,但这不会影响您的情况

  4. 还要在您设置setValue时确保将其int归档。 (通常不是)在您的示例中,其int

例如:

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

}

这只是psuda代码,无法正常工作