Autor Thema: Verständnisfrage für die DocumentCollection  (Gelesen 3958 mal)

Offline ceiphren

  • Frischling
  • *
  • Beiträge: 6
Verständnisfrage für die DocumentCollection
« am: 26.06.09 - 16:45:06 »
Hallo zusammen,

Ich versteh die Ordnung der DocumentCollection nicht ganz.
Im folgenden Agenten erzeuge ich eine view und will in der Reihenfolge, in der die ViewEntries ankommen, Dokumente in eine DocumentCollection schreiben.

Der ViewNavigator iteriert auch richtig durch die Dokumente durch, aber die
DocumentCollection schreibt sie nicht in der gleichen Reihenfolge rein.
Das Resultat kann man in der zweiten Schleife sehen, wo die Dokumente in einer anderen, aber nicht wirklich nachvollziehbaren Reihenfolge herauskommen.

import lotus.domino.*;

import java.io.FileOutputStream;
import java.util.Random;

public class dxlExporter extends AgentBase
{
   public void NotesMain()
   {
      try
      {
         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();
         Database db = agentContext.getCurrentDatabase();
         
         DocumentCollection selectedDocs = agentContext.getUnprocessedDocuments();
         DocumentCollection coll = createDocumentCollection(db);
         
         View view = selectedDocs.getFirstDocument().getParentView();
         ViewNavigator viewNav = view.createViewNav();
         
         System.out.println(view);
         ViewEntry entry = viewNav.getFirst();
         while(entry != null)
         {
            Document doc = entry.getDocument();
            if(doc != null)
            {
               System.out.println(doc.getItemValue("Subject"));
               
               if(selectedDocs.getDocument(doc) != null)
                  coll.addDocument(doc, false);
            }
            entry = viewNav.getNext();
         }
         
         System.out.println("\n");
         Document doc3 = coll.getFirstDocument();
         while(doc3 != null)
         {
            System.out.println(doc3.getItemValue("Subject"));
            doc3 = coll.getNextDocument();
         }
         
         
      } catch(Exception e) { e.printStackTrace(); }
   }
   
   public DocumentCollection createDocumentCollection(Database db) throws NotesException
   {
      double b = new Random().nextDouble();
      return db.search(b+" = \""+b+"\"");
   }
}


btw. das Erstellen der DocumentCollection erscheint etwas wirr, aber ich muss in domino 7 programmieren und die dortige java-version kennt keine Methode zum erstellen einer leeren Collection.

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Verständnisfrage für die DocumentCollection
« Antwort #1 am: 26.06.09 - 16:46:10 »
DocumentCollections im Notes kennen keine Reihenfolge  >:(
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline ceiphren

  • Frischling
  • *
  • Beiträge: 6
Re: Verständnisfrage für die DocumentCollection
« Antwort #2 am: 29.06.09 - 08:50:58 »
Das ist verdammt schlecht. Es geht schlussendlich darum, die Dokumente in einer gewünschten Reihenfolge als dxl zu exportieren, aber der Exporter nimmt nur DocumentCollections und NoteCollections an und beide ignorieren die Reihenfolge, mit der sie die Dokumente bekommen.

Mir fällt langsam nichts weiter ein, als so ne Art Meta-Item zu erzeugen, indem der Index des Dokumentes festgehalten wird, damit ich die Reihenfolge der Dokumente aus der dxl abfragen kann... aber das ist ne ziemlich blöde Lösung.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Verständnisfrage für die DocumentCollection
« Antwort #3 am: 29.06.09 - 16:00:49 »
In Java kannst du die DocumentCollection iterieren und die Documents in ein SortedSet schreiben. Hm. Bzw. du mußt Wrapper Objekte erzeugen, die dann das Comparator-Interface implementieren. Und DXLExporter/Importer könntest du mit solchen Gebilden eh nicht nutzen.
Du kannst natürlich auch jedes Dokument einzeln als importieren/exportieren. Und im Filesystem eine Sortierung erzeugen.
In JavaCollectionFrameworkSprach ist DocumentCollection hinsichtlich der Sortierung unwiderruflich HashSet. Es existieren keine sortierbaren Kinder-Klassen davon. 
 
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline ceiphren

  • Frischling
  • *
  • Beiträge: 6
Re: Verständnisfrage für die DocumentCollection
« Antwort #4 am: 29.06.09 - 16:11:20 »
@Pitiyankee: das Problem, die Dokumente einzeln zu exportierten ist aber, dass ich dann zum einen mal locker über 100 xml-Dateien habe, anstatt eines einfachen Streams. Das weitere handling würde dann etwas ausufern.

Also nichtsdestotrotz hab ich das Wunder hinbekommen, die DocumentCollection in der gewünschten Reihenfolge zu erzeugen.

Die Dokumente stehen also an den gewünschten Stellen.

Jetzt kommt aber das Problem, dass der dxlExporter meine Reihenfolge ignoriert.
Er exportiert die Dokumente nämlich immer so, wie sie in der Kategorie "All Documents" steht (ich benutze die Datenbank "personal journal", die in jeder Notes-Version dabei sein müsste, als Testapplikation).

Die Sortierungen nach "By Category" und "By Diary Date" kann ich zwar in meiner Collection erzeugen, das juckt den Exporter aber herzlich wenig.

Zurzeit sieht der Agent wie folgt aus:

import lotus.domino.*;

import java.io.FileOutputStream;
import java.util.Random;

public class dxlExporter extends AgentBase
{
   private String Path = "Path-to-file";
   
   public void NotesMain()
   {
      try
      {
         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();
         Database db = agentContext.getCurrentDatabase();
         
         DocumentCollection selectedDocs = agentContext.getUnprocessedDocuments();
         DocumentCollection coll = createDocumentCollection(db);
         
         View view = selectedDocs.getFirstDocument().getParentView();
         ViewEntryCollection viewNav = view.getAllEntries();
         
         System.out.println(db.getViews());
         
         ViewEntry entry = viewNav.getFirstEntry();
         while(entry != null)
         {
            Document doc = entry.getDocument();
            if(doc != null)
            {
               System.out.println(doc.getItemValue("Subject"));   
               if(selectedDocs.getDocument(doc) != null)
                  coll.addDocument(doc, false);
            }
            entry = viewNav.getNextEntry();
         }
         
         System.out.println("blubberblabla\n\n");
         Document doc3 = coll.getFirstDocument();
         while(doc3 != null)
         {
            System.out.println(doc3.getItemValue("Subject"));
            doc3 = coll.getNextDocument();
         }
         
         exportDocs(coll, session, db);
         
      } catch(Exception e) { e.printStackTrace(); }
   }


   public DocumentCollection createDocumentCollection(Database db) throws NotesException
   {
      double b = new Random().nextDouble();
      return db.FTSearch(null);
   }
   
   
   void exportDocs(DocumentCollection coll, Session session, Database db) throws Exception
   {
      NoteCollection coll2 = db.createNoteCollection(true);
      System.out.println(coll2.getCount());
      Document doc = coll.getFirstDocument();
      while(doc != null)
      {
         coll2.add(doc);
         doc = coll.getNextDocument();
      }
      System.out.println(coll2.getCount());
      DxlExporter exp = session.createDxlExporter();
      exp.setOutputDOCTYPE(false);
      exp.setConvertNotesBitmapsToGIF(true);
      
      String dxlResult = exp.exportDxl(coll2);
      
      FileOutputStream out = new FileOutputStream(Path);
      out.write(dxlResult.getBytes("utf-8"));
      out.close();
   }
}
« Letzte Änderung: 29.06.09 - 16:20:39 von ceiphren »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz