如何使用Java在IBM Notes视图(NotesView)中循环浏览所有文档

时间:2018-08-09 14:01:22

标签: java lotus-notes

我有一个包含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中找不到条目。我在做什么错了?

这旁边还有一个问题。如果用户在文档中,但是我的代理也更改了一个字段,则当用户保存文档时,将发生保存冲突。有没有办法解决这个问题。

2 个答案:

答案 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;    
}