我有一个包含2个以上文档的视图。这是获取文档的代码
目前我有这个:
Document orderRegelDocument = OrderRegelsVoorCopsView.getFirstDocument();
while (orderRegelDocument != null) {
//do something here
System.out.println("Nieuwe Orderregel");
tempOrderRegel = OrderRegelsVoorCopsView.getNextDocument(orderRegelDocument);
orderRegelDocument.recycle(); // recycle the one we're done with
orderRegelDocument = tempOrderRegel;
}
第一个文档被抓取,但是之后我得到一个NotesException:Notes错误:在索引viewName中找不到条目。我在做什么错了?
这旁边还有一个问题。如果用户在文档中,但是我的代理也更改了一个字段,则当用户保存文档时,将发生保存冲突。有没有办法解决这个问题。
答案 0 :(得分:1)
我不知道所有代码,但我猜想是假设假设getNextDocument(document)获取下一个并将其设置在文档中(否则,您永远不会将getNext结果分配给任何东西),则两次调用getNextDocument()而不是一次,而是跳过第二行并尝试操纵第三行(不存在),您会收到错误消息。
if( OrderRegelsVoorCopsView.getNextDocument(orderRegelDocument) != null){ //Here you take the next
tempOrderRegel = OrderRegelsVoorCopsView.getNextDocument(orderRegelDocument); //And here you take the next after
// Here you are at the wrong item already...
答案 1 :(得分:1)
您显然在未显示的代码中执行了某事,这在调用getNextDocument
之前正在改变视图。您可能正在删除文档,更改导致不再为视图选择文档的项目值,或更改导致将文档重新排序到视图集合中其他位置的项目值。
用于避免这种情况的惯用法是将对getNextDocument
的调用作为它在while循环主体中发生的第一件事。也就是说,只需将其向上移动,使其出现在您的//do something here
代码之前。像这样:
Document orderRegelDocument = OrderRegelsVoorCopsView.getFirstDocument();
while (orderRegelDocument != null) {
tempOrderRegel = OrderRegelsVoorCopsView.getNextDocument(orderRegelDocument);
//do something here
System.out.println("Nieuwe Orderregel");
orderRegelDocument.recycle(); // recycle the one we're done with
orderRegelDocument = tempOrderRegel;
}