如何修复';JCO_错误_转换:无法将类型java.lang.String的值转换为结构';
我们在SAP中实现的功能之一无法正常工作。 在SAP中,所有函数都正常工作并返回正确的值,但是,在Java JCo中调用时,客户机需要的是结构,而不是字符串或int。 从参数中提取结构时,它会给出一个结构,该结构有两个未命名的列,每个列都没有要填充的字节长度如何修复';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
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()
。