ViewNavigator 遍历返回类别失败
ViewNavigator Fails on Traversal Back to Category
我在某些代码中遇到一个有趣的错误,该错误与我在其他地方使用的代码几乎相同(至少在结构上)。我收到 "Notes error: Entry not found in index " 错误,它发生在我的 ViewNavigator.getNext(ViewEntry) 行中的 while 循环中。我觉得我在这件事上遗漏了一些明显的东西,所以希望有人能发现它(我只是盯着它看就疯了)。
[更新]
Jesse 关于将 autoUpdate 设置为 false 的注释起到了作用。它似乎与 this tech note from 2002 相关,因为在此循环期间我的循环确实保存到另一个文档(相同的数据库,不同的视图)。我在视图上定义句柄后立即放置 vw.setAutoUpdate(false);
成功。
[/更新]
我正在浏览单类别视图(通过引用视图中每个文档的字段值)以总结分组文档中的一些信息。开启debug后,发现错误发生在我从第一个分类的最后一个Document(一个Doc的ViewEntry)遍历回一个分类(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;
}
设置view.setAutoUpdate(false)应该会清除它,可能是因为文件保存在那里。
我发现在获取视图后一直设置它是一个很好的策略(我相信 ODA 会在 Khan 模式下自动执行)。然后,它还允许您设置 nav.setBufferMaxEntries(400),从而改善冗长的视图导航。
我在某些代码中遇到一个有趣的错误,该错误与我在其他地方使用的代码几乎相同(至少在结构上)。我收到 "Notes error: Entry not found in index " 错误,它发生在我的 ViewNavigator.getNext(ViewEntry) 行中的 while 循环中。我觉得我在这件事上遗漏了一些明显的东西,所以希望有人能发现它(我只是盯着它看就疯了)。
[更新]
Jesse 关于将 autoUpdate 设置为 false 的注释起到了作用。它似乎与 this tech note from 2002 相关,因为在此循环期间我的循环确实保存到另一个文档(相同的数据库,不同的视图)。我在视图上定义句柄后立即放置 vw.setAutoUpdate(false);
成功。
[/更新]
我正在浏览单类别视图(通过引用视图中每个文档的字段值)以总结分组文档中的一些信息。开启debug后,发现错误发生在我从第一个分类的最后一个Document(一个Doc的ViewEntry)遍历回一个分类(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;
}
设置view.setAutoUpdate(false)应该会清除它,可能是因为文件保存在那里。
我发现在获取视图后一直设置它是一个很好的策略(我相信 ODA 会在 Khan 模式下自动执行)。然后,它还允许您设置 nav.setBufferMaxEntries(400),从而改善冗长的视图导航。