Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Untitled am 23.06.06 - 10:55:16

Titel: View.GetNextDocument aus DocumentCollection
Beitrag von: Untitled am 23.06.06 - 10:55:16
Hi zusammen

Ich habe eine DocumentCollection, welche aus zwei verschiedenen Quellen stammen kann:
1. Database.UnprocessedDocuments oder
2. Database.Search

Nun benötige ich vom Dokument die Eigenschaft "ColumnValues". Diese funktioniert bekanntlich    nur, wenn das Dokument aus einer View stammt.

Da die Dokumente aber von der Collection stammen, musste hier eine Übersetzung ins View-Document geschehen. Ich picke also dasselbe Dokument der Collection, aus der View.

Dies geschieht so:
Code
Set doc2 = View.GetNextDocument(doc)
				
If doc2 Is Nothing Then
Set doc2 = View.GetPrevDocument(doc)
					
    If doc2 Is Nothing Then
        'doc from the collection does not exist in this view -> go to the next doc					
    Else
        Set doc2 = View.GetNextDocument(doc2)
    End If
Else
    Set doc2 = View.GetPrevDocument(doc2)
End If

Wobei doc2 das Dokument aus der View und doc das Dokument aus der Collection ist.

Hat die Collection nun als Quelle "UnprocessedDocuments", funktioniert alles einwandfrei, werden die Dokumente aber mit "Database.Search" gesucht, behauptet die erste Anweisung "Set doc2 = View.GetNextDocument(doc)" jedesmal "The document is not in view xxx".  ???

Hat jemand eine Idee, wie ich diese "Übersetzung" anders gestalten könnte, oder was der Unterschied zwischen den beiden Collections ist?

Danke und Grüsse
Moritz
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Wilhelm am 23.06.06 - 11:23:06
Hi Moritz,

was genau willst Du denn erreichen?
Welchen Wert brauchst du aus der ColumnValues-Eigenschaft, den du nicht aus dem Dokument-Objekt selbst erhalten kannst?

Gruß

Willi
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Untitled am 23.06.06 - 11:26:07
Hi Willi

Ich möchte die Werte aus einer View exportieren. Das kann ja durchaus auch mal eine Berechnung sein, oder ein veränderter Wert vom ursprünglichen Feld aus dem Dokument.

Moritz
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Glombi am 23.06.06 - 11:31:17
Du kannst mit doc.UniversalID die DocID ermitteln und dann über alle Dokumente der View iterieren, bis das entsprechende Dokument gefunden wurde.

Zur Optimierung würde ich eine Kopie der View machen, die nach @Text(@DocumentUniqueID) sortiert ist. Dann bekommst Du das Dokument sofort mit
set viewdoc = view.GetDocumentByKey( doc.UniversalID)

Andreas
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Untitled am 23.06.06 - 11:38:36
Daran hatte ich auch schon gedacht.

Aber die erste Variante ist leider viel zu imperformant.

Die zweite Möglichkeit ist dann wohl die Einzige, aber ich wollte mir diese Kopie eigentlich sparen, da der Export dynamisch und unabhängig von der View funktionieren sollte  :-\

Was auch eine Möglichkeit wäre: Alle Dokumente der View packen und darauf den Search ausführen, statt in der Datenbank. Aber ich habe bis jetzt auch keinen Weg gefunden, alle Dokumente einer View in eine Collection zu kriegen (einigermassen performant).

Danke für eure Antworten!
Moritz
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Untitled am 23.06.06 - 11:53:31
Ich denke, ich werde es mal mit
Code
numDocs& = notesView.FTSearch( query$, maxDocs% )

probieren. Das Problem hier ist, die Datenbank ist nicht indiziert... da sei die Performance laut Hilfe auch ganz schlecht. Mal sehen...

Moritz

EDIT: Mist! Das gibt ja nur die Anzahl gefundener Dokumente zurück aber nicht die Dokumente selbst.  >:(
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Glombi am 23.06.06 - 11:59:02
Als Mistgabel empfehle ich

Conducts a full-text search of all the entries in a Notes database collection, and reduces the collection to those entries that match.
Defined in
NotesViewEntryCollection
Syntax
Call notesViewEntryCollection.FTsearch( query$, maxDocs% )

Die ViewCollection holst Du Dir vorher mit
Set notesViewEntryCollection = notesView.AllEntries


Andreas
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Untitled am 23.06.06 - 12:10:22
Yoo danke!

Das werde ich so machen!

Moritz
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Tode am 23.06.06 - 17:17:52
warum so kompliziert ?

Warum erstellst Du Dir nicht eine NotesViewEntryCollection der View und suchst Dir dort ganz einfach über set doc2 = VE.GetEntry( doc ) dein Dokument raus ?

So habe ich das schon oft gemacht und keine Probleme gehabt (wenn das Dok wirklich in der View ist)

Tode
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Untitled am 26.06.06 - 09:34:23
Das ist ja genau die Methode, nach der ich gesucht habe  ;D

Herzlichen Dank Tode!
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Untitled am 26.06.06 - 15:03:59
Zu früh gefreut. Funktioniert leider doch nicht....

Code
	Dim db As NotesDatabase
	Dim dc As NotesDocumentCollection
	Dim uiWS As New NotesUIWorkspace
	Dim view As NotesView
	Dim doc1 As NotesDocument
	Dim doc2 As NotesDocument
	Dim entry As NotesViewEntry
	Dim entryCollection As NotesViewEntryCollection 
	
	Set view = uiWS.CurrentView.View
	Set entryCollection = view.AllEntries
	Set db = view.Parent
	Set dc = db.UnprocessedDocuments
	Set doc1 = dc.GetFirstDocument
	Set entry = entryCollection.GetEntry(doc1)
	Set doc2 = entry.Document
	
	Msgbox doc2.ParentView.Name 
	Msgbox doc2.ColumnValues(0)

Das Dokument (doc2) hat nichteinmal mehr die Parent-View. Aber gesetzt wird es, die UNID kann ich mir zum Beispiel ausgeben lassen.

Habe ich jetzt was übersehen?

Moritz
Titel: Re: View.GetNextDocument aus DocumentCollection
Beitrag von: Untitled am 26.06.06 - 17:05:07
"NotesUIView.Documents" funktioniert übrigens auch nicht. Obwohl ich nicht nachvollziehen kann, was daran nicht "Accessed through a view" sein soll...