Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复';JCO_错误_转换:无法将类型java.lang.String的值转换为结构';_Java_Sap_Sapjco3 - Fatal编程技术网

如何修复';JCO_错误_转换:无法将类型java.lang.String的值转换为结构';

如何修复';JCO_错误_转换:无法将类型java.lang.String的值转换为结构';,java,sap,sapjco3,Java,Sap,Sapjco3,我们在SAP中实现的功能之一无法正常工作。 在SAP中,所有函数都正常工作并返回正确的值,但是,在Java JCo中调用时,客户机需要的是结构,而不是字符串或int。 从参数中提取结构时,它会给出一个结构,该结构有两个未命名的列,每个列都没有要填充的字节长度 Metadata: {[],[]} 0,0 我们在SAP中尝试了输入参数“I_REZEPT”的不同数据类型,如int8和char12 private String sollwerte(JSONObject jsonin)抛出JSONExc

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

Metadata:
{[],[]}
0,0
我们在SAP中尝试了输入参数“I_REZEPT”的不同数据类型,如int8和char12

private String sollwerte(JSONObject jsonin)抛出JSONException、JCoException{
String id=String.valueOf(jsonin.getInt(“rezeptid”);
JCoStructure in=input.getStructure(“I_REZEPT”);
System.out.println(“Fieldcount:+in.getFieldCount());
输入设置值(“I_REZEPT”,id);
e、 printStackTrace();
执行(目的地);
...
堆栈跟踪: com.sap.conn.jco.ConversionException:(122)jco_错误_转换:无法将值“1”从类型java.lang.String转换为字段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|
|------------------|
|                  |
|------------------|
是这样的

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

如果不知道ABAP端的函数接口定义,这里很难提供帮助。但是如果
input.getStructure(“I_REZEPT”);
起作用,这个导入参数I_REZEPT似乎是structure。因此您不能调用
input.setValue(“I_REZEPT”,(String)id);
尝试为其设置字符串,这是异常显示的内容。I_REZEPT是一个导入参数,属于类型结构,不是字符串或字符类型参数。它包含各种其他字段-至少一个


与此相反,我想您可以调用.setValue(0,id)中的
来设置此结构的第一个字段或.setValue中的
(“FIELDNAME”,id)
在结构中使用正确的字段名。

如果不知道ABAP端的函数接口定义,在这里很难提供帮助。但是如果
input.getStructure(“I_REZEPT”);
起作用,此导入参数I_REZEPT似乎是结构。因此,您无法调用
input.setValue(“I_REZEPT”,“String)id);
尝试为其设置字符串,这是异常显示的内容。I_REZEPT是一个导入参数,属于类型结构,不是字符串或字符类型参数。它包含各种其他字段-至少一个


与此相反,我想您可以调用.setValue(0,id)中的
来设置此结构的第一个字段或.setValue中的
(“FIELDNAME”,id);
在结构中使用正确的字段名。

您好!欢迎来到Stack Overflow!您参加了吗?另外,请确保您阅读了,以便可以改进您的问题。目前,您还不清楚您想要达到什么目的以及您的问题是什么。您好!欢迎来到Stack Overflow!您参加了吗?Also,请确保你阅读和,这样你可以改进你的问题。目前,还不太清楚你想达到什么目的以及你的问题是什么。谢谢你的快速回复。我忘了提到,我已经尝试提取结构。结果是一个结构有两个不可填充的列,没有名称。填充结构事实证明,这是徒劳的。从SAP Dashboard中我看到的是导入变量的类型被声明为CHAR12。一个结构包含1个或多个字段,其中每个字段也可以是另一个(嵌套的)重新构造,甚至是一个表。您可以使用事务SE37和双击SAP GUI中的元素来查看和浏览该结构。请注意我之前的答复中
input
in
之间的差异。如果您想在Java中使用结构和元数据,还可以查看方法
toXML()
getListMetaData()
getRecordMetaData()
。感谢您的快速回复。我忘了提到,我已经尝试提取该结构。结果是一个结构包含两个没有名称的不可填充列。填充该结构对我来说是徒劳的。从SAP仪表板中我看到的是导入变量的类型被声明为CHAR12。一个结构包含1个或多个f每个字段也可以是另一个字段的ield(嵌套)重新构造,甚至是一个表。您可以使用事务SE37和双击SAP GUI中的元素来查看和浏览该结构。请注意我之前的答复中
input
in
之间的差异。如果您想在Java中使用结构和元数据,还可以查看方法
toXML()
getListMetaData()
getRecordMetaData()