【问题标题】:Getting No data when accessing SAP table with jCo(3.x))使用 jCo(3.x) 访问 SAP 表时未获取数据)
【发布时间】:2018-11-30 06:36:14
【问题描述】:

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

当我检查 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);

}

更新了代码。

【问题讨论】:

  • 您遇到任何错误,或者只是行数为 0?如果后面是这种情况,请在 SAP 端执行 RFC 并检查计数,并确保参数相同
  • 我在导出 RETTEXT 值中收到合作伙伴 100 不存在消息。

标签: java spring-boot sap jco


【解决方案1】:

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

  1. 如果您将“”或“”设置为字段。 (当您设置值时,如果这些值具有某些值,则更好地设置

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

  3. 你也不需要添加(索引)你可以只是 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));

}

这只是伪代码,不起作用

【讨论】:

  • 是的,我发现了问题。正如您在上面的代码中提到的,我将“”值设置为导入参数假设为空。现在它按预期工作。 :)
  • @cat1197:在您问题帖子的代码片段中,您将“”值设置为导入参数。您正在设置值“xxx”和“abc”。如果您做的事情与问题中描述的不同,您通常不会在这里获得适当的帮助。
  • @Krishantha Dinesh:始终调用基于字符串的 setValue([name|index], java.lang.String) 方法是不必要的。如果可行,JCo 会自动在基本 Java 类型之间进行适当的数据类型转换。
【解决方案2】:

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

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

【讨论】:

  • 我是 SAP 新手。我的目的是获取特定的合作伙伴记录 (partnerId=100)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多