2016-11-11 1 views
1

Dans IBM Lotus Domino, j'ai créé un agent Java. Je suis dans cet agent avoir une vue qui a des lignes de commande:Le nombre de DocumentCollection est 5, mais seulement 1 document.

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

La vue a une colonne de tri: id_order qui est également classé.

je l'ai fait ce qui suit pour obtenir tous les documents dans la vue avec le même id_order:

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

Maintenant, je veux faire une boucle à travers tous les documents et imprimer la description:

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

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

En cours d'exécution , il imprime 1 document et après la première boucle il finit. Cependant, à mon avis, je vois clairement 5 documents avec le même ID_Order. La chose étrange est que cela ne prend que le dernier document de la vue (quand je cherchai sur id_order)

enter image description here

Le code complet est comme ceci:

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

Et puis-je obtenir la lignes de commande ..

Répondre

1

Votre boucle while n'obtient jamais le document suivant.

En vous while changer la dernière ligne

orderLineDocument = orderLinesView.getNextDocument(); 

En outre, alternativement, puisque vous avez déjà construit une collection. Vous pouvez l'utiliser pour obtenir le document suivant sous la forme

orderLineDocument = orderLineCollection.getNextDocument(); 

De la documentation, une classe d'exemple ressemble à ceci. Cet exemple permet d'obtenir tous les documents dans la base de données et crée DocumentCollection. La différence entre votre code et l'exemple ci-dessous est que vous créez la collection à partir de la vue. Néanmoins, cette méthode devrait fonctionner pour vous aussi.

Cet agent obtient tous les documents dans une base de données.

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

+0

Il yea désolé j'avais orderLineCollection.getNextdocument(); J'ai tapé à tort à la question .. Et la raison pour laquelle j'utilise getAllDocumentsByKey est parce que je ne veux pas une boucle à travers 100.000+ documents – YdB

+0

Aucun problème. :) C'est pourquoi j'ai dit que vous pouvez faire le document collection de quelque façon, soit en faisant 'getAllDocuments()' ou 'getDocumentByKeys()' l'objet de collection sera le même que vous avez juste besoin de sortir le document suivant dans le boucle, de la manière que j'ai mentionné ci-dessus. –

+0

:) Merci de répondre, j'ai orderLineCollection.getNextDocument(); Mais je n'ai que le dernier document. donc je vois 5 si je regarde dans la vue Mais je reçois seulement le dernier – YdB