我試圖針對JCo對象實現一些Java模式(Facade和Iterator)。獲取錯誤嘗試使用java.util.iterator迭代JCoTable
在這裏,我試圖通過JCoTable創建一個Iterator,就像我在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紀錄= 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)
您能否指定您正在使用的JCo的哪個版本?版本2和版本3之間存在巨大的API差異,也許這就是爲什麼你會被各種不起作用的例子搞糊塗的原因。 – vwegert 2013-04-23 06:46:05
@vwegert,我正在使用JCo 3.我認爲是因爲我使用了sapjco3.dll和sapjco3.jar。 – Davidson 2013-04-23 14:01:59