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

时间:2019-06-05 21:50:54

标签: java sap sapjco3

我们在SAP中实现的功能之一无法正常运行。 在SAP中,所有函数都可以正常工作并返回正确的值,但是,在Java JCo中调用时,客户端需要的是结构而不是字符串或整数。 从Parameter中提取结构时,它会提供一个结构,该结构具有两个未命名的列,每个列都没有要填充的字节长度。

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);
...

Stacktrace: com.sap.conn.jco.ConversionException:(122)JCO_ERROR_CONVERSION:无法将I.REZEPT字段中的java.lang.String类型的值“ 1”转换为STRUCTURE     在com.sap.conn.jco.rt.AbstractRecord.createConversionException(AbstractRecord.java:436)     在com.sap.conn.jco.rt.AbstractRecord.createConversionException(AbstractRecord.java:430)     在com.sap.conn.jco.rt.AbstractRecord.setValue(AbstractRecord.java:2824)     在com.sap.conn.jco.rt.AbstractRecord.setValue(AbstractRecord.java:3933)     在edu.hsalbsig.intellifarm.connector.sap.IntellifarmSapFunction.sollwerte(IntellifarmSapFunction.java:226)     在edu.hsalbsig.intellifarm.connector.sap.IntellifarmSapFunction.execute(IntellifarmSapFunction.java:61)     在edu.hsalbsig.intellifarm.connector.mqtt.IntellifarmMqttClient.messageArrived(IntellifarmMqttClient.java:98)     在org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:513)     在org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:416)     在org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:213)     在java.base / java.lang.Thread.run(Thread.java:834)


从SAP调试功能时看起来像这样

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

预期是这样

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

1 个答案:

答案 0 :(得分:0)

在不了解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);并使用结构中的正确字段名称。