【问题标题】:How to pass Table Field as import parameter to SAP RFC using JAVA(JCO3)如何使用 JAVA(JCO3)将表字段作为导入参数传递给 SAP RFC
【发布时间】:2018-02-12 13:37:53
【问题描述】:

按照我在 JCO3.0 中的代码连接到 RFC 并从功能模块获取数据:

    try {
        JCoDestination destination = JCoDestinationManager.getDestination(DESTINATION_NAME);

        JCoFunction function = destination.getRepository().getFunction("funtion_abap");         
        ***function.getImportParameterList().setValue("IM_ID_NAME", "MTC_ZPR008_TEMPB");***
        function.execute(destination);
        JCoTable table = function.getTableParameterList().getTable("export_table");
        }
        catch(Exception e){
            }

以下是我的 ABAP 函数:

  CALL FUNCTION 'funtion_abap' DESTINATION m_vsyid
  EXPORTING
    IM_ID_NAME =  table_vname
  IMPORTING
    export_table = table_tvarvc
  EXCEPTIONS
    system_failure        = 1
    communication_failure = 2
    resource_failure      = 3
    OTHERS                = 4.

以下是在将字符串作为导入参数传递而将表字段作为导入参数时遇到的错误:

      Exception in thread "main" com.sap.conn.jco.ConversionException: (122) JCO_ERROR_CONVERSION: Cannot convert a value of 'MTC_ZPR008_TEMPB' from type java.lang.String to TABLE at field IM_ID_NAME
at            com.sap.conn.jco.rt.AbstractRecord.createConversionException(AbstractRecord.java:468)
at com.sap.conn.jco.rt.AbstractRecord.createConversionException(AbstractRecord.java:462)
at com.sap.conn.jco.rt.AbstractRecord.setValue(AbstractRecord.java:2958)
at com.sap.conn.jco.rt.AbstractRecord.setValue(AbstractRecord.java:4074)
at com.amgen.rfc.RFC_Connection.main(RFC_Connection.java:47)

请告诉我如何解决这个问题。

【问题讨论】:

  • 您能否提供您尝试调用的 BAPI 的屏幕截图,以显示输入参数(在事务 SE37 中)?
  • 您的 funtion_abap 不仅缺少“c”,它还在另一个(远程)ABAP 系统上调用了第二个“funtion_abap”模块?你确定你的场景会做什么?调用其他 ABAP 系统(或者它自己)的无限递归循环? m_vsyid 来自哪里?在查看 Java 代码之前,我会先考虑这一点。您是否已经使用 SE37 执行了此操作?
  • 忽略拼写错误。问题是我必须将表字段作为参数传递,不知道如何传递。 m_vsyid 这是目标变量也忽略它
  • 显然“IM_ID_NAME”没有定义为 CHAR 或 STRING 类型,而是定义为 TABLE 类型。所以你必须在 setValue(...) 中传递一个 JCoTable 对象,而不是字符串值“MTC_ZPR008_TEMPB”。我猜您的 ABAP RFM 定义是错误的,但您正在向我们展示它,所以没有人可以提供帮助。通常只获取 JCoTable 并填充它(而不是创建一个新实例并设置它)。
  • @Trixx 你能给我代码行吗?我是新手,所以无法理解将 JCoTable 作为参数传递。

标签: java po saprfc jco


【解决方案1】:

RFC 定义和您的代码是直接对立的。根据ABAP函数(据我所知)调用的结果是字段IM_ID_NAME中的值,表是输入参数。

我不是 100% 熟悉 ABAP 中的 RFC 声明(我只知道它的 Java 方面),但如果我正确解释错误消息,表格似乎在输入参数列表中,而不是表参数列表(不常见但也从未见过)。所以你可能不得不打电话给getInputParameterList,而不是getTableParameterList。此外,您应该省略字段 IM_ID_NAME 的设置,因为这是响应值并且驻留在输出参数列表中。

【讨论】:

    【解决方案2】:

    我知道这个问题已经很老了,但是有一天有人可能会发现我的回答很有用,因为我遇到了同样的问题:

    JcoTable tab = function.getImportParameterList().getTable("IM_ID_NAME");
    tab.appendRow();
    tab.firstRow(); // I'm not sure if this is actually reqiured
    tab.setValue("PARAM_NAME", paramValue);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多