如何使用 Java 遍历 IBM Notes (NotesView) 视图中的所有文档

How to loop through all documents in a View of IBM Notes (NotesView) with Java

我有一个包含 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 error: Entry not found in index viewName。我做错了什么?

旁边还有一个问题。如果用户在文档中,但我的代理也更改了一个字段,那么当用户保存文档时,它会发生保存冲突。有没有办法克服这个问题。

我不知道你所有的代码,但我的猜测是假设 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...

您显然在代码中做了 某事 ,但您没有显示,这会在您调用 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;    
}