我们在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|
|------------------|
| |
|------------------|
答案 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);
并使用结构中的正确字段名称。