【发布时间】: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 作为参数传递。