Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Don Pasquale am 06.03.03 - 12:30:41
-
Hallo Leute,
ich möchte alle Dokumente in einem Ordner durchlaufen und
anhängig von einem Kriterium, das Dokument aus diesem Ordner
nehmen.
Nach Ablauf der Routine sind aber noch gut die Hälfte der
Dokumente übrig, ich vermute, dass wenn das erste Dokument
gelöscht wurde, das GetNextDocument das Dritte Document nimmt,
weil er neu zählt und das 2. Dokument zum 1. wurde und
das 3. zum 2. .
Wie kann ich das unterbinden ? Von hinten anfangen ?
Das ist mein Versuch.
Wer weis Rat ?
Ciao
Don Pasquale
Dim session As New NotesSession
Dim doc As NotesDocument
Dim view As NotesView
Dim dc As NotesDocumentCollection
Dim db As NotesDatabase
Dim RemoveDoc As NotesDocument
Set session = New notessession
Set db = session.CurrentDatabase
Set view = db.GetView( "($Inbox)" )
Set doc = view.GetFirstDocument
While Not ( doc Is Nothing)
if doc.FELDA = XYZ then
Set RemoveDoc = doc
Call Removedoc.RemoveFromFolder("($Inbox)")
end if
Set doc = view.GetNextDocument(doc)
end
-
... schau mal bei OpenNTF - dort habe ich vor Tagen eine Lib entdeckt "NotesDocumentArray" - mit der kann man das lösen..
ata
-
... oder
while
getfirstdocument
.
.
remove
.
view.refresh
getfirstdocument
end
-
@Don
... ich habe nach er Lib gesucht, aber selbst nicht mehr gefunden. ich weiß, daß ich sie zu Hause habe. Wenn du also Interesse hast, dann melde dich nochmal...
... die Klasse in der Lib kann
-Remove(doc)
-GetFirstDocument
-GetNextDocument(doc)
-AddDocument
-GetIndex(doc)
-Sort(feldName)
... uvm...
ata
-
@Ata,
ich habe das Teil gefunden und sitze gerade dran, allerdings
habe ich gerade ein NotesDocumentArray gefüllt und will
es nun mit GetNextDocument durchlaufen und dann steckt das Teil
in einer Endlosschleife.
Bist Du Dir sicher, das das Teil funtkioniert ?
Ciao
Don Pasquale
-
hm..klausal hat doch schon...na ja, egal
Forumadmins mit Augen/Ohrenpax.. 8) 8) 8) :-*
-
... oder
while
getfirstdocument
.
.
remove
.
view.refresh
getfirstdocument
end
Interessant, weil bestechend, das Problem ist, dass wenn nicht alle Dokument removed werden sollen, also auch nur eines übrig bleibt, dann bin ich in einer endlosschleife
Ciao
Don Pasquale
-
... ich dachte daran das Array parallel laufen zu lassen - du durchläufst die Collection, löschst aber im Array...
ata
-
@Klaussal:
Ich probiere es jetzt mal damit, den Rest kann man sich ja denken :
If eswurdegeloescht = 1 Then
Set doc = view.GetFirstDocument
Else
Set doc = view.GetNextDocument(doc)
End If
Ciao
Don Pasquale
-
@Rob, @Don
... denk mal nach, warum die Methode nicht so gut ist. Die ersten 5 Dokumente werden nicht gelöscht, das 6. ja - dann beginnst du wieder beim ersten Doc???
... kann ich nicht nachvollziehen?
ata
-
warum macht ihr euch das Leben denn so schwer ?? Warum nimmst du nicht eine NotesViewEntryCollection, die du entsprechend deinem Suchkriterium füllst und dann mit vc.removeAll alle documente löscht ??
Oder habe ich da etwas falsch verstanden ?
Du möchtest doch erreichen, daß aus einem Ordner ( View ) alle Dokumente mit einem bestimmten Kriterium gelöscht werden.
??? ??? ???
-
... das wäre natürlich das eleganteste...
ata ;D
-
@ata:
Du hast recht, ist ziemlich ineffizient.
Klaussal ist wohl eher davon ausgegangen, dass alle Dokumente zu verschieben sind.
Ich benötige für´s erste eine funktionierende Funktion,
danach kann ich mich um´s optimieren kümmern.
Ich habe das NotesDocumentArray zuerst mit den Kandidaten gefüllt ( das schien auch geklappt zu haben ) aber dass schlichte durchlaufen dieses Array produzierte eine Endlosschleife.
Ciao
Don Pasquale
-
... ich schau mir das aus Interesse heute Abend mal an...
ata
-
Hier wäre der link
http://www.openntf.org/projects/codebin/codebin.nsf/81882682b238ec2685256be70008ecaf/9d3c707bdc2a378e88256c6e00128fc3!OpenDocument
Ich habe es jetzt mit einer Liste realisiert, in die ich alle UniversalIDs packe und die ich dann an Ende einmal durchlaufe.
Vielen Dank für Eure Ideen
Ciao
Don Pasquale
Hier der Auszug aus meiner Lösung
Dim LOESCHLISTE List As String*32
Dim Removedoc As NotesDocument
Dim session As New NotesSession
Dim doc As NotesDocument
Dim view As NotesView
Dim dc As NotesDocumentCollection
Dim db As NotesDatabase
Dim RemoveDoc As NotesDocument
Set session = New notessession
Set db = session.CurrentDatabase
Set view = db.GetView( "($Inbox)" )
Set doc = view.GetFirstDocument
While Not ( doc Is Nothing)
if doc.FELDA = XYZ then
j = j + 1
LOESCHLISTE(j) = doc.UniversalID
end if
Set doc = view.GetNextDocument(doc)
Wend
Forall x In LOESCHLISTE
Set RemoveDoc = db.GetDocumentByUNID(X)
Call Removedoc.RemoveFromFolder("($Inbox)")
End Forall