跟随我在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.
以下是在将String作为导入参数传递时将String作为导入参数获取的错误:
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)
请告诉我如何解决这个问题。
答案 0 :(得分:0)
RFC定义和您的代码直接相反。根据ABAP函数(据我所知),调用的结果是字段IM_ID_NAME
中的值,表是输入参数。
我不是100%熟悉ABAP中RFC的声明(我只知道它的Java方面),但是如果我正确解释错误消息,那么表似乎在输入参数列表而不是表参数列表(不常见但以前从未见过)。因此,您可能需要拨打getTableParameterList
而不是getInputParameterList
。此外,您应该省略字段IM_ID_NAME
的设置,因为这是响应值并位于输出参数列表中。
答案 1 :(得分:0)
我知道这个问题已经很老了,但是自从我遇到同样的问题后,有一天某人可能会觉得我的回答有用:
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);