Domino 9 und frühere Versionen > Entwicklung
Eine Collection die eine View abarbeitet und gewisse Dokumente löscht
Don Pasquale:
Gibt es irgendwas, dass gegen folgenden Code spricht,
bzw. an welcher Stelle könnte ich den noch optimieren ?
Const VIEW_AKTUELL = "($ALL)"
Dim ws As New NotesUiWorkspace
Dim view As NotesView
Dim session As New NotesSession
Dim Doc As NotesDocument
Dim DocDelete As NotesDocument
Dim LOESCHLISTE List As String
Set db = session.CurrentDatabase
Set view = db.GetView(VIEW_AKTUELL)
Set doc = view.GetFirstDocument
While Not doc Is Nothing
If doc.Kriterium(0) = "JA" Then
j = j + 1
LOESCHLISTE(j) = Doc.UniversalID
End If
Set doc = view.GetNextDocument(doc)
Wend
Set doc = Nothing
Forall x In LOESCHLISTE
Set DocDelete = db.GetDocumentByUNID(X)
Call DocDelete.Remove( True )
Set DocDelete = Nothing
End Forall
Set view = db.GetView(VIEW_AKTUELL)
Call ws.viewrefresh()
Ciao
Don Pasquale
Glombi:
Das spricht dagegen:
listName( listTag ) = value
where listName is the name of the list, listTag is a string that uniquely identifies the element, and value is the value you want to assign to the element.
Dein j muss ein String sein, also
dim jtag as string
...
jtag = cstr(j)
LOESCHLISTE(jtag) = Doc.UniversalID
Andreas
Gruenkohl:
Warum löschst du die Dokumente nicht direkt?
Du kannst doch wenn du eins gefunden hast, was gelöscht werden soll dirkt sagen "Call Doc.Remove( True )"
Don Pasquale:
@Glombi
Die Loeschliste ist eine LISTE des Typs Strings,
das "j" sollte vom Typ Integer sein.
@Gruenkohl
Das ist genau der Punkt auf den ich selbst hereingefallen bin.
Wenn Du eine Collection hast, mit 10 Dokumenten
und dass 5.te Dokument wird gelöscht, dann wird dass 6te Dokument zum 5ten Dokument und bei der nächsten Iteration
wird genau dieses neue 5.te Dokument ausgelassen.
Wenn Du beispielsweise die gesamte Collection mit n-Elementen löschen möchtest, gelingt Dir das erst in Wurzel N durchläufen.
Verbesserungen
Dim LOESCHLISTE List As String*32 ( oder wie lange ist die UniversalID ?)
Dim j As Integer
Dim db As NotesDatabase
Die Dimensionierungen sollten wegen Speicherfragmentierung in der Reihenfolge der Größe der Objekte stehen.
Ciao
Don Pasquale
Gruenkohl:
Ja, aber nur wenn du sagst: doc = view.getnextdocument(doc).
Wenn du aber fragst und nur das nächste Doc nimmst, wenn du das aktuelle Doc nicht gelöscht hast müsste es gehen, oder?
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln