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();
}
}
}
在 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(); } } }