DocumentCollection计数为5但只获得1个文档

时间:2016-11-11 09:30:34

标签: java lotus-notes

在IBM Lotus Domino中,我构建了一个Java代理。在这个代理中,我得到一个有订单行的View:

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上搜索时)

enter image description here

完整的代码是这样的:

   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) {

然后我得到了订单..

1 个答案:

答案 0 :(得分:1)

你的while循环永远不会得到下一个文档。

在你循环中将最后一行改为

orderLineDocument = orderLinesView.getNextDocument();

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

orderLineDocument = orderLineCollection.getNextDocument();

从文档中,示例类看起来像这样。这个例子虽然是在数据库中获取所有文档并创建DocumentCollection。您的代码与以下示例之间的区别在于您是从视图创建集合。尽管如此,这种方法也适合你。

  

此代理获取数据库中的所有文档。

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