0

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)    
4

1 に答える 1

1

テーブルの行を反復処理したいと仮定すると、場違いに使用していると思いますJCoTable.getStructure()。名前が示すように、現在選択されているレコードの n 番目のフィールドを取得し、それを構造体として返そうとします。もちろん、これは個々の列が構造化された列である場合にのみ可能です。それが単一の(アトミック)フィールドである場合、この変換はまさにあなたが遭遇しているエラーメッセージで失敗すると予想されます。

于 2013-04-23T18:47:55.503 に答える