Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: bikerboy am 08.12.06 - 11:03:22

Titel: NotesDocumentCollection
Beitrag von: bikerboy am 08.12.06 - 11:03:22
Hallo ich mal wieder,

Heute mit ganz  neuen Problemstellung. Ich habe hier folgenden Code :

Code

Dim colSearch as NotesDocumentCollection
Dim forCollection as NotesDocumentCollection

Set colSearch = dbDocHouse.AllDocuments
Call colSearch.FTSearch("form",0)


Bis jetzt alles ganz easy und es funktioniert. (Was mich auch schon gewundert :D)

So nun erstmal die Erklärung bevor ich den Code Präsentiere. Ich habe eine Schleife die immer wieder mit einer Collection arbeiten soll. Ich will aber diese Collection nicht in jedem Durchlauf neu zusammenstellen. Stichwort Laufzeit.

Code
Set forCollection = collection

So dachte ich, dass ich quasi eine Konstante habe die sich nicht verändert und ich einfach nach jedem Durchlauf die forCollection mit den Werten fülle. Nun wende ich im Verlauf ein FTSearch auf die forCollection an. Aber das Ergebnis der wird auch auf die colSearch angewendet. Grosse Frage warum. Sind die Dinger mit der Zeile nun gekoppelt? Wenn ja wie kann ich das umgehen ?

Danke schonmal
Titel: Re: NotesDocumentCollection
Beitrag von: umi am 08.12.06 - 11:13:45
Tja, da sind wir wieder mal beim Thema "POINTER".
Mit dem SET machst setzt Du nur den Pointer von colSearch zu forCollection oder was auch immer.
=> die Beiden Collections zeigen nach dem SET auf die gleiche Datenmenge => Du machst keine Kopie der Collection sondern nur der "Pointer".
Titel: Re: NotesDocumentCollection
Beitrag von: bikerboy am 08.12.06 - 11:18:21
Hmm Pointer ???? kenne ich nicht. Soll es in C gegeben haben. Aber wenn ich die Dokumente alle in die andere Collection kopiert brauche ich ja genauso lange, oder ?
Titel: Re: NotesDocumentCollection
Beitrag von: umi am 08.12.06 - 11:32:25
Vielleicht sagt Dir copy by Reference oder Copy by Value was oder vielleicht auch Deep Copy, naja egal.

Auf jedenfall würde ich mal die Performance einsparungen ignorieren und zuerst schauen das Dein Code funktioniert.
Titel: Re: NotesDocumentCollection
Beitrag von: dirk_2909 am 08.12.06 - 12:10:57
Um die Daten/Dokumente in einer Collection in eine andere Collection zu übertragen/kopieren, musst Du folgende Methode verwenden:

Code
Call notesDocumentCollection.AddDocument( document [, checkDups ] )

Dabei musst Du mit einer Schleife alle Dokumente verarbeiten, was natürlich KEINE Performanceverbesserung bedeutet!!

Titel: Re: NotesDocumentCollection
Beitrag von: Tode am 13.12.06 - 10:22:53
mal ne blöde Frage: Was machst Du mit der Collection, dass die nach jedem Durchlauf "anders" aussieht, bzw nicht mehr so wie vor dem Durchlauf !?

Entfernst Du Dokumente ? Machst Du einen dc.Search um die Collection zu verkleinern ?

Was verursacht die Veränderung der Collection ?
Vielleicht kannst Du ja hier ansetzen.

Eine andere Möglichkeit wäre natürlich die Collection "zwischenzulagern" z.B. in einem Ordner:

call dc.PutAllInFolder( "collectionContainer" )
(vorher nicht vergessen den Folder zu leeren über NotesView.Allentries.RemoveFromFolder)

dann kannst Du über Folder.AllEntries die Collection relativ Performant immer wieder zurückholen, wenn Du sie brauchst.

HTH
Tode
Titel: Re: NotesDocumentCollection
Beitrag von: Pyewacket am 13.12.06 - 23:18:14
Die Zwischenlagerung in einem Ordner ist aber nur brauchbar solange sichergestellt ist dass nur ein User diese Datenbank verwendet, ansonsten gibt das nur noch Chaos wenn sich die Anwender gegenseitig den Ordner verwüsten.....
Titel: Re: NotesDocumentCollection
Beitrag von: koehlerbv am 13.12.06 - 23:50:16
Ich gehe mal davon aus, dass er natürlich persönliche Ordner meint. Man kann ja nie davon ausgehen, dass nur ein User gleichzeitig mit der Aktion zu Gange ist - wenn dem heute so ist, kann es morgen gnaz anders sein (aber dann erinnert sich keiner mehr an den früher programmierten Schrott).

Bernhard
Titel: Re: NotesDocumentCollection
Beitrag von: bikerboy am 14.12.06 - 09:49:32
@Tode

Naja ich stelle ein Collection aus allen Dolumenten auf die in der VollTextindizierten DB sind und fange dann an mit db.FTsearch an zu "filtern".

Diese Such er erfolgt nach meheren Kriterien, wenn das erste Kriterium keine Ergebnis liefert, setze ich mit dem 2. Kriterium an und das geht bis zum 6. Kriterium weiter, dafür brauche ich aber immer wieder eine neue saubere Collection.

@Pyewacket + koehlerbv

also die Sache mit den Ordner wird wohl eher nichts, da es später mehere Leute nutzen sollen.
Titel: Re: NotesDocumentCollection
Beitrag von: Tode am 15.12.06 - 18:11:51
ääää.... warum verwendest Du denn überhaupt eine "zwischenspeicherungscollection", wenn Du sowieso immer auf AllDocuments gehst !?

Wenn jede Deiner 6 Kriterien UNABHÄNGIG sind (also nicht aufeinander aufbauen), und das impliziert Dein Satz "wenn das erste Kriterium kein Ergebnis liefert, setze ich mit dem 2. Kriterium an"

dann kannst Du doch ganz einfach sagen:

Set dc = db.FTSearch( .. )

Dann sparst Du Dir das zeitraubende Aufbauen der db.AllDocuments.

Möglicherweise wird dann der FTSearch etwas langsamer (weil er auf eine Datenbank geht und nicht auf eine Collection im Speicher), aber einen Tod muss man sterben.

HTH
Tode