Как исправить 'JCO_ERROR_CONVERSION: не удается преобразовать значение из типа java.lang.String в STRUCTURE' - PullRequest
1 голос
/ 06 июня 2019

Одна из функций, которые мы реализовали в SAP, работает неправильно. В SAP все функции работают правильно и возвращают правильные значения, однако при вызове в Java JCo клиенту нужна структура, а не строка или тип int. При извлечении структуры из параметра она дает структуру, имеющую два безымянных столбца, каждый из которых не должен содержать длины байтов.

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: Невозможно преобразовать значение '1' из типа java.lang.String в STRUCTURE в поле I_REZEPT в 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 голосов
/ 06 июня 2019

Не зная определения интерфейса вашей функции со стороны 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); с использованием правильного имени поля в структуре.

...