DocumentCollection 计数为 5 但仅获取 1 个文档

DocumentCollection count is 5 but only get 1 document

在 IBM Lotus Domino 中,我构建了一个 Java 代理。在此代理中,我得到一个包含订单的视图:

View orderLinesView = CurrentDatabase.getView("OrderLinesOnId");

视图有一个已排序的列:ID_Order 也已分类。

我执行了以下操作以获取视图中具有相同 ID_Order 的所有文档:

 Vector keyRegel = null;
 keyRegel = new Vector(); 
 keyRegel.add(orderDocument.getItemValueString("ID_Order"));
 DocumentCollection orderLineCollection =  orderLinesView.getAllDocumentsByKey(keyRegel, true);

现在我想遍历所有文档并打印描述:

System.out.println("Count orderRegelcollection:" + 
Document orderLineDocument = orderLineCollection.getFirstDocument();

while (orderLineDocument != null) {
  System.out.println("description " + orderLineDocument.getItemValueString("description"));
   orderLineDocument = orderLineCollection.getNextDocument();
}

在 运行 上,它确实打印了 1 个文档,并在第一个循环后完成。但是,在我看来,我清楚地看到 5 个文件具有相同的 ID_Order。 奇怪的是,它只获取视图中的最后一个文档(当我在 ID_Order 上搜索时)

完整的代码是这样的:

   View relationsView = dbRelatie.getView("Relations");;
          Document relationDocument = relationsView.getFirstDocument();
 while (relationDocument != null) {

      Vector key = null;
      key = new Vector(); 
      key.add("");
      key.add(relationDocument.getItemValueString("getDebtor"));
      DocumentCollection orderDocumentCollection =  TotalOrdersView.getAllDocumentsByKey(key, true);
      Document orderDocument = orderDocumentCollection.getFirstDocument();

      while (orderDocument != null) {

然后我得到订单..

您的 while 循环永远不会获取下一个文档。

在 while 循环中将最后一行更改为

orderLineDocument = orderLinesView.getNextDocument();

此外,或者因为您已经建立了一个集合。您可以使用它来获取下一个文档

orderLineDocument = orderLineCollection.getNextDocument();

文档中的示例 class 如下所示。此示例虽然正在获取数据库中的所有文档并创建 DocumentCollection。您的代码与以下示例之间的区别在于您是从视图创建集合。尽管如此,这种方法也应该适用于您。

This agent gets all the documents in a database.

import lotus.domino.*;
public class JavaAgent extends AgentBase {
  public void NotesMain() {
    try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();
      // (Your code goes here)
      Database db = agentContext.getCurrentDatabase();
      DocumentCollection dc = db.getAllDocuments();
      Document tmpdoc;
      Document doc = dc.getFirstDocument();
      while (doc != null) {
        System.out.println(doc.getItemValueString("Subject"));
        tmpdoc = dc.getNextDocument();
        doc.recycle();
        doc = tmpdoc;
      }
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

Documentation for DocumentCollection