我正在尝试针对JCo对象实现一些Java模式(Facade和Iterator)。
在这里,我试图在JCoTable
上创建一个迭代器,就像我在Java中创建任何集合一样。下面是我的类片段。在MyClass
中,我有一个执行迭代的内部类。
我正在使用table.getStructure(...)
方法,但我错过了一些东西。我看到过一些代码片段,它们显式地使用元数据创建一个结构,但老实说,这些示例中没有代码,我在那里有点挣扎,担心我在用一种复杂性换取另一种复杂性。
我的目标是为其他Java程序员简化SAP BAPI调用和表处理。这是一个重构练习。我的返回变量在Iterator中不兼容。
提前谢谢你。
我的类:
class MyClass
...
protected JCoTable table;
...
private class JCoTableIterator implements Iterator<JCoRecord> {
public boolean hasNext() {
return table.getRow() < table.getNumRows();
}
@Override
public JCoRecord next() {
return table.getStructure(table.getRow() + 1);
}
@Override
public void remove() {
table.deleteRow();
}
}
我实现:
Iterator<JCoRecord> it = table.iterator();
while(it.hasNext()) {
JCoRecord record = it.next(); <<<<< *Exception
logger.info(record.getString("WERKS"));
... other field procesing ...
}
但是在JCoRecord record = it.next()
行,我得到以下错误。
com.sap.conn.jco.ConversionException: (122) JCO_ERROR_CONVERSION: Cannot convert field VBELN of type CHAR to StructureRecord at com.sap.conn.jco.rt.AbstractRecord.createConversionException(AbstractRecord.java:415) at com.sap.conn.jco.rt.AbstractRecord.createConversionException(AbstractRecord.java:410) at com.sap.conn.jco.rt.AbstractRecord.getStructure(AbstractRecord.java:2472)
假设您想遍历表的行,我会说您使用JCoTable.getStructure()
不合适。顾名思义,它接受当前选中的记录的第n个字段,并尝试将其作为结构返回。当然,只有当单个列是结构化列时才有可能这样做——如果它是单个(原子)字段,那么我预计这种转换将失败,并显示您遇到的错误消息。