Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Don Pasquale am 06.03.03 - 12:30:41

Titel: Collection durchlaufen und dabei Doc removen
Beitrag 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
   
   
   
   
   
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: ata am 06.03.03 - 13:09:14
... schau mal bei OpenNTF - dort habe ich vor Tagen eine Lib entdeckt "NotesDocumentArray" - mit der kann man das lösen..

ata
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: klaussal am 06.03.03 - 13:23:01
... oder

while
   getfirstdocument
   .
   .
   remove
   .
   view.refresh
   getfirstdocument
end
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: ata am 06.03.03 - 13:40:06
@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
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: Don Pasquale am 06.03.03 - 15:01:51
@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
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: Rob Green am 06.03.03 - 15:09:50
hm..klausal hat doch schon...na ja, egal

Forumadmins mit Augen/Ohrenpax.. 8) 8) 8)  :-*
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: Don Pasquale am 06.03.03 - 15:25:25
... 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


Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: ata am 06.03.03 - 15:32:51
... ich dachte daran das Array parallel laufen zu lassen - du durchläufst die Collection, löschst aber im Array...

ata
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: Don Pasquale am 06.03.03 - 15:38:07

@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

Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: ata am 06.03.03 - 15:40:35
@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
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: eknori am 06.03.03 - 15:48:36
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.

 ??? ??? ???
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: ata am 06.03.03 - 15:50:31
... das wäre natürlich das eleganteste...

ata  ;D
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: Don Pasquale am 06.03.03 - 15:51:32
@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

Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: ata am 06.03.03 - 15:54:56
... ich schau mir das aus Interesse heute Abend mal an...

ata
Titel: Re:Collection durchlaufen und dabei Doc removen
Beitrag von: Don Pasquale am 06.03.03 - 16:29:58
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