Ошибка при попытке перебрать 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-е поле выбранной записи и пытается вернуть ее в виде структуры. Это, конечно, возможно только в том случае, если этот отдельный столбец является структурированным столбцом - если это одно (атомарное) поле, то я ожидаю, что это преобразование завершится неудачно именно с сообщением об ошибке, с которым вы столкнулись.