Ошибка при попытке перебрать JCoTable с помощью java.util.iterator

Я пытаюсь реализовать некоторые шаблоны Java (Facade и Iterator) против объектов JCo.

Здесь я пытаюсь создать итератор поверх JCoTable так же, как и любую коллекцию в Java. Ниже приведен фрагмент моего класса. В MyClass у меня есть внутренний класс, который выполняет итерацию.

Я использую методы table.getStructure (...), но мне чего-то не хватает. Я видел некоторые фрагменты, где они явно создают структуру с использованием метаданных, но, честно говоря, в этих примерах код отсутствует, и я немного борюсь там, опасаясь, что меняю одну сложность на другую.

Моя цель - упростить вызовы SAP Bapi и обработку таблиц для других Java-программистов. Это упражнение по рефакторингу. Мои возвращаемые переменные несовместимы в Итераторе.

Заранее спасибо.

Мои занятия:

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)    

1 ответ

Решение

Предполагая, что вы хотите перебрать строки таблицы, я бы сказал, что вы используете JCoTable.getStructure() не к месту. Как следует из названия, он берет n-е поле выбранной записи и пытается вернуть ее в виде структуры. Это, конечно, возможно только в том случае, если этот отдельный столбец является структурированным столбцом - если это одно (атомарное) поле, то я ожидаю, что это преобразование завершится неудачно именно с сообщением об ошибке, с которым вы столкнулись.

Другие вопросы по тегам