JCo オブジェクトに対していくつかの Java パターン (Facade、および Iterator) を実装しようとしています。
ここでは、Java のコレクションと同じように、JCoTable に対して Iterator を作成しようとしています。以下は私のクラスのスニペットです。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)