0

我有一个视图,里面有超过 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。我究竟做错了什么?

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

4

2 回答 2

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...
于 2018-08-09T14:23:09.600 回答
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;    
}
于 2018-08-09T15:35:11.107 回答