首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA sapjco3无法从返回表中找到数据

JAVA sapjco3无法从返回表中找到数据
EN

Stack Overflow用户
提问于 2018-03-01 17:58:57
回答 1查看 1.2K关注 0票数 2

我有一个名为ZRFC_BOM_005的SAP RFC。在我执行RFC函数之后,我尝试从返回表中获取字段的值,但它只显示字段的名称,而不显示字段的值。但是,函数"printJCoTable(JCoTable jcoTable)“与其他RFC一起工作得很好。我不知道这里有什么问题。

这是我的代码:

执行SAP RFC:

代码语言:javascript
复制
    JCoFunction function = destination.getRepository().getFunction("ZRFC_BOM_005");             
    JCoParameterList input = function.getImportParameterList();     
    input.setValue("DATE_FROM", datefrom);
    input.setValue("DATE_TO", dateto);                      
    input.setValue("I_CAPID", i_capid);
    input.setValue("I_MEHRS", i_mehrs);
    input.setValue("I_MTNRV", i_mtnrv);
    input.setValue("I_STLAN", i_stlan);
    input.setValue("I_WERKS", i_werks);         
    if (function == null)
        throw new RuntimeException("ZRFC_BOM_005 not found in SAP.");
    try {           
        function.execute(destination);          
    } catch (AbapException e) {
        System.out.println(e.toString());           
    }
    JCoTable table = function.getTableParameterList().getTable("T_BOMITEM");
    printJCoTable(table);

使用printJCoTable打印表的字段和表值:

代码语言:javascript
复制
public static List<List<String>> printJCoTable(JCoTable jcoTable) {
    List<List<String>> listData = new ArrayList<List<String>>();        
    // header
    // JCoRecordMeataData is the meta data of either a structure or a table.
    // Each element describes a field of the structure or table.
    JCoRecordMetaData tableMeta = jcoTable.getRecordMetaData();
    for (int i = 0; i < tableMeta.getFieldCount(); i++) {
        System.out.print(String.format("%s\t\t", tableMeta.getName(i)));
    }
    System.out.println(); // new line

    // line items
    for (int i = 0; i < jcoTable.getNumRows(); i++) {
        // Sets the row pointer to the specified position(beginning from zero)
        jcoTable.setRow(i);
        // Each line is of type JCoStructure
        List list = new ArrayList<>();
        for (JCoField fld : jcoTable) {             
                list.add(fld.getValue());               
            System.out.print(String.format("%s\t", fld.getValue()));
        }
        listData.add(list);
        System.out.println();           
    }       
    return listData;
}   

但结果是只有字段的名称,而没有字段的值。

PS:我确信有返回字段的值存在与我输入的相同的参数,因为我已经通过另一个连接到SAP的软件进行了检查。

有没有可能是超时问题?因为当我执行这个RFC时,大约需要10分钟才能运行。

那我怎么解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2018-03-19 18:02:15

正如您所评论的,jcoTable.getNumRows()返回0:

这意味着,如果您尝试访问该表的任何内容字段,则该表为空,并且JCo异常错误消息是正确的。因此,您的RFC调用返回这个空表,这意味着您的输入参数值似乎不包含您期望的数据。再检查一次。

我猜您的DATE_FROM和DATE_TO参数设置错误。或者将java.util.Date对象放在其中,或者如果datetodatefrom必须是字符串,则为其内容选择日期格式yyyyMMddyyyy-MM-dd,即“2018年”或“20180319-03-19”。

如果不是那么简单,也可能是外部到内部表示的转换退出例程,这些例程由transaction SE37自动调用和使用,但如果启用了RFC的函数模块是直接从外部调用的,则不是这样。有关这方面和其他问题的更多详细信息,我建议学习SAP note 206068

您可以使用ABAP调试器工具检查这两种场景,以便查看在通过SE37调用函数模块时,与通过JCo程序调用时相比,真正传递了哪些输入参数值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49047066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档