ViewNavigator не удается вернуться назад к категории

Я получаю интересную ошибку в некотором коде, который почти идентичен (по крайней мере, по структуре) к коду, который я работал, в другом месте. Я получаю сообщение об ошибке "Примечания: запись не найдена в индексе", и это происходит в строке моего ViewNavigator.getNext(ViewEntry) в цикле while. Я чувствую, что упускаю что-то очевидное в этом, так что, надеюсь, кто-то может заметить это (я становлюсь бестолковым от того, чтобы просто смотреть на это)

[Обновление] Примечание Джесси о настройке autoUpdate в false сделало свое дело. Похоже, это связано с этой технической запиской 2002 года, поскольку мой цикл сохраняет в другой цикл документ (та же БД, другое представление). Мне удалось разместить vw.setAutoUpdate(false); сразу после того, как я определил свою ручку в представлении. [/Обновить]

Я иду по представлению одной категории (по значению ссылочного поля из каждого документа в представлении), чтобы обобщить некоторую информацию из сгруппированных документов. После включения отладки я обнаружил, что ошибка возникает при моем обходе из последнего документа (ViewEntry of Doc) в первой категории обратно в категорию (ViewEntry).

Вот урезанная версия моего кода (//... для ясности обозначает удаленные строки):

View vw = db.getView("<ViewName>");
ViewNavigator nav = vw.createViewNav();
ViewEntry first = nav.getFirst();
String unid = "";
while(first != null){
  if(first.isCategory()){
    if(!unid.isEmpty()){
      //summarize the info and save it back to the category-relevant doc
      Document myDoc = db.getDocumentByUNID(unid);
      //doing my thing
      boolean success = myDoc.save(true, false);
      myDoc.recycle();
    }
    unid = "";
  }
  if(first.isDocument()){
    Vector<?> colVals = first.getColumnValues();
    if(unid.isEmpty()){
      //reset temp aggregation vars back to initial value (e.g.- 0)
      //...
      unid = (String) colVals.get(5); // the value of the category-relevant UNID
    }else{
      //doing the aggregation of summary values with the temp vars established before and handled after
      //...
      //perform aggregation from colVals with temp vars
    }
    session.recycle(colVals);
  }
  ViewEntry tmp = nav.getNext(first); //this is the line that fails!! only if it's the next category, which there is one
  first.recycle();
  first = tmp;
}

1 ответ

Решение

Установка view.setAutoUpdate(false) должна очистить его, вероятно, из-за документа, сохраненного в нем.

Я считаю, что это хорошая политика - устанавливать это все время после получения представления (я считаю, что ODA делает это автоматически в режиме Кхана). Затем он также позволяет вам установить nav.setBufferMaxEntries(400), что улучшает длительную навигацию просмотра.

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