Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: smoky am 26.03.14 - 16:16:48

Titel: Agent der Dokumente aktualisiert tut nicht was er soll
Beitrag von: smoky am 26.03.14 - 16:16:48
Hallo,

Es tut mir leid, aber mir ist kein besserer Titel eingefallen :-)

Ich habe einen Agent der einmal täglich Dokumente in einer Ansicht aktualisieren soll. In einer DB klappt das ohne Probleme. Jetzt habe ich den Agent in in eine andere DB kopiert und bekomme immer den Fehler: Notes Error Entry not found in Index (Neu)
Beim Debugger sehe ich leider auch nicht was ihm auf einmal fehlt.
Die Felder in der betroffenen Maske habe ich kontrolliert, es sind hier einige DBLookups drinnen die ich aber mit einem @iserror abprüfe ob ein Ergebnis retour kommt. Mit F9 im offenen Dokument funktioniert die Berechnung ohne Probleme.

Hier mein Code
Option Public
Sub Initialize
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim v As NotesView
   Dim doc As NotesDocument
   Dim agent As notesagent
   
   Set db = s.CurrentDatabase
   Set v = db.GetView("neu")
   Set doc = v.GetFirstDocument
   While Not doc Is Nothing
      Call doc.ComputeWithForm(True, False)
      Call doc.Save(False, True)
      Set doc = v.GetNextDocument(doc)
   Wend
   Print "xxxx Dokumente aktualisiert"
End Sub

Und falls sich jemand fragt für was das gut sein soll :-) Die Dokumente werden Nachts automatisch erstellt und einige Felder zeigen Daten an die erst Vormittag zu Verfügung stehen.
Die Bearbeiter können sie natürlich immer selbst aktualisieren, nur für den Fall das mal einer nicht daran denkt wollte ich es automatisieren.

Ich nehme auch gerne andere Anregungen an.

lg
Christine
Titel: Re: Agent der Dokumente aktualisiert tut nicht was er soll
Beitrag von: thkn777 am 26.03.14 - 16:28:54
@smoky
Tritt der Fehler hier auf? --> Set doc = v.GetNextDocument(doc)

Bin grad in Eile... daher nur eine Vermutung: das doc wird verändert und ist danach nicht mehr in der View.

Lösung wäre in der While-Schleife etwa so. Sprich: das nächste Doc gleich am Anfang holen.
  Set doc1 = v.GetNextDocument(doc)
  ' dann Dein Code
  Set doc = doc1

Viel Erfolg,
Th.
Titel: Re: Agent der Dokumente aktualisiert tut nicht was er soll
Beitrag von: Peter Klett am 26.03.14 - 16:30:13
Kann es sein, dass durch das ComputeWithForm die Dokumente aus der Ansicht verschwinden?

Dann knallt das bei

Set doc = v.GetNextDocument(doc)

weil doc nicht  mehr in der Ansicht ist. Da gibt es verschiedene Herangehensweisen, findest Du hier vieles im Forum. Manche schalten die Aktualisierung der Ansicht ab, andere holen sich mit einem temporären Dokument das nächste, bevor sie das vorige verändern.

Ich halte es für das einfachste, das über eine NotesDocumentCollection zu tun, denn dann sparst Du erstens eine Ansicht und zweitens hast Du den o.g. Effekt nicht.
Titel: Re: Agent der Dokumente aktualisiert tut nicht was er soll
Beitrag von: smoky am 26.03.14 - 16:50:49
Vielen Dank an beide

Danke für den Hinweis, das hatte ich nicht bedacht und eine bereits vorhandene Ansicht verwendet, aus der verschwinden die Dokumente sobald das betroffene Feld berechnet ist.
Mit einer wo sie drin bleiben funktioniert der Agent wie gewollt  ;D
lg
Christine