Domino 9 und frühere Versionen > Entwicklung
Problem mit notesview.getnextdocument(doc)
elajen:
Hallo,
das sollte funktionieren.
Gruß von Ekki
Abdelhadi Doujali:
Hi,
Wenn man in einer Ansicht Dokumente durchläuft, bearbeitet und speichert, dann verrutscht die Reihenfolge der Dokumente, dh. wenn du gerade Dok1 bearbeitet und speicherst, beim nächsten Durchlauf erwartest du eigentlich Dok2. Wenn du Glück hast, bekommst auch Dok2, sonst Dok10 oder gar nicht -> Fehler.
Um dieses Problem zu vermeiden musst 2 Doks (oDoc und oDocnext) definieren wie in diesem Bsp:
Direkt am Anfang der Schleife oDocnext setzen, also
Set oDocnext=oDoc, damit sicherst du dir auf jedenfall das nächste Dok.
Dann am Ende der Schleife das hier machen:
Set oDoc = oView.GetNextDocument(oDocnext)
Bsp. ich lösche Doks aus einer Ansicht:
Dim oSession As New notessession
Dim oDB As notesdatabase
Dim oView As notesview
Dim oDoc As Notesdocument
Dim oDocnext As Notesdocument
Set oDB = oSession.currentdatabase
Set oView = odb.getview ("vwDruckmasken")
Set oDoc = oView.GetFirstDocument
While Not (oDoc Is Nothing)
Set oDocnext=oDoc
Call odoc.Remove( True )
Set oDocnext = oView.GetFirstDocument
Set oDoc = oView.GetNextDocument(oDocnext)
Wend
Axel:
Hi,
bist du wirklich sicher, dass das richtig funktioniert? ???
Du schreibst, dass du am Anfang der Schleife oDoc in oDocNext sicherst. So weit so gut, aber weiter unter in der Schleife überschreibst du oDocnext mit GetFirstDocument. Meines Erachtens bringst du hier die Schleife komplett durcheinander.
Die Lösung die ich immer verwende sieht so aus (hier auf Basis einer Collection, geht aber mit einer View genauso):
Dim session As New Notessession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim docTemp As NotesDocument
Dim collection As NotesDocumentCollection
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument
While Not (doc Is Nothing)
Set docTemp = collection.GetNextDocument(doc)
Call doc.Remove( True )
Set doc = docTemp
Wend
Axel
Abdelhadi Doujali:
Hi Axel,
du hast recht, leider ist es mir ein Fehler untergelaufen.
Also wenn man ein Doc in einer Ansicht bearbeitet und speichert oder löscht, wie in meinem Bsp. dann muss man das nächste Doc als erstes in der Schleife holen.
Bsp. ich lösche Doks aus einer Ansicht:
Dim oSession As New notessession
Dim oDB As notesdatabase
Dim oView As notesview
Dim oDoc As Notesdocument
Dim oDocnext As Notesdocument
Set oDB = oSession.currentdatabase
Set oView = odb.getview ("vwDruckmasken")
Set oDoc = oView.GetFirstDocument
While Not (oDoc Is Nothing)
'hole näcste oDocnext vom oDoc
Set oDocnext = oView.GetNextDocument(oDoc)
'oDoc löschen oder bearbeiten und speichern.
Call oDoc.Remove( True )
'setze oDoc=oDocnext
Set oDoc=oDocnext
Wend
Ich denke so ist es richtig, im Prinzip wie dein Code.
Danke für den Hinweis und viel Spaß
Abdelhadi
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln