Domino 9 und frühere Versionen > Entwicklung

Problem mit notesview.getnextdocument(doc)

<< < (2/2)

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