1

我们在 SAP 中实现的功能之一无法正常工作。在 SAP 中,所有函数都正常工作并返回正确的值,但是,当在 Java JCo 中调用时,客户端需要一个结构而不是 String 或 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: 无法在 com.sap.conn.jco.rt.AbstractRecord 的字段 I_REZEPT 中将值“1”从 java.lang.String 类型转换为 STRUCTURE。 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) at edu.hsalbsig.intellifarm.connector.mqtt.IntellifarmMqttClient.messageArrived(IntellifarmqttClient.java:98) 在 org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:416) 在 org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:513) 在 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|
|------------------|
|                  |
|------------------|
4

1 回答 1

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);中使用正确的字段名称。

于 2019-06-06T06:06:02.210 回答