如何修复"JCO_ERROR_CONVERSION:无法将值从 java.lang.String 类型转换为 STRUCTURE"



我们在SAP系统中实现的一个功能无法正常工作。在SAP系统中,所有函数都正常工作并返回正确的值,但是,当在Java JCo中调用时,客户端需要一个结构而不是字符串或整数。

从参数中提取结构时,它给出一个结构,该结构有两个未命名的列,每个列没有要填充的字节长度。

Metadata:
{[],[]}
0,0

我们在SAP系统中为输入参数"I_REZEPT"尝试了不同的数据类型,如int8和char12

private String sollwerte(JSONObject jsonin) throws JSONException, JCoException {
String id = String.valueOf(jsonin.getInt("rezeptid"));
JCoStructure in = input.getStructure("I_REZEPT");
System.out.println("Fieldcount:"+in.getFieldCount());
input.setValue("I_REZEPT", id);
e.printStackTrace();
function.execute(destination);
...

堆栈跟踪:

com.sap.conn.jco.ConversionException: (122) JCO_ERROR_CONVERSION: Cannot convert a value of '1' from type java.lang.String to STRUCTURE at field I_REZEPT
  at com.sap.conn.jco.rt.AbstractRecord.createConversionException(AbstractRecord.java:436)
  at com.sap.conn.jco.rt.AbstractRecord.createConversionException(AbstractRecord.java:430)
  at com.sap.conn.jco.rt.AbstractRecord.setValue(AbstractRecord.java:2824)
  at com.sap.conn.jco.rt.AbstractRecord.setValue(AbstractRecord.java:3933)
  at edu.hsalbsig.intellifarm.connector.sap.IntellifarmSapFunction.sollwerte(IntellifarmSapFunction.java:226)
  at edu.hsalbsig.intellifarm.connector.sap.IntellifarmSapFunction.execute(IntellifarmSapFunction.java:61)
  at edu.hsalbsig.intellifarm.connector.mqtt.IntellifarmMqttClient.messageArrived(IntellifarmMqttClient.java:98)
  at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:513)
  at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:416)
  at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:213)
  at java.base/java.lang.Thread.run(Thread.java:834)
<小时 />

从SAP系统调试函数时,它看起来像这样

Input:
|--------|
| PARAMETERS 'INPUT'
|--------|
|I_REZEPT|
|--------|
|        |
|--------|
|I_REZEPT|
|--------|

意料之中是这样的

Input:
|------------------|
| PARAMETERS 'INPUT'
|------------------|
|I_REZEPT          |
|------------------|
|012345678901234567|
|------------------|
|                  |
|------------------|

如果不从 ABAP 端了解您的函数接口定义,这里很难提供帮助。但是,如果input.getStructure("I_REZEPT");工作,则此导入参数I_REZEPT似乎是结构。因此,您不能通过尝试为其设置字符串来调用input.setValue("I_REZEPT", (String)id);,这就是异常显示的内容。I_REZEPT 是一个 IMPORT 参数,并且属于 STRUCTURE 类型,它不是 STRING 或 CHAR 类型参数。它包含各种其他字段 - 至少一个。

取而代之的是,我想您可以调用in.setValue(0, id);来设置此结构的第一个字段,或者在结构中使用正确的字段名称in.setValue("FIELDNAME", id);

最新更新