Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: m3 am 06.12.06 - 13:58:26

Titel: NotesView.GetNextDocument - Dokumente werden ausgelassen?
Beitrag von: m3 am 06.12.06 - 13:58:26
Freunde, Admins, Designer!
Ich bin nicht gekommen, um Notes zu preisen ....

So, Scherz beiseite, ich habe eine Frage an das p.t. Publikum:
Ich hab einen Agent, der zeitgesteuert einmal in der Nacht über eine View rattert. Die klassische
Code
Set docAct = viewA.GetFirstDocument()
Do While Not (docAct Is Nothing)
	Set docAct = viewA.GetNextDocument(docAct)
Loop
Schleife, nix besonderes.

Nun hab ich aber das Problem, dass der Agent einige Dokumente "überspringt".

Meine Überlegung dazu:
Der Agent setzt in den Dokumenten Felder und speichert das Dokument. Durch den geänderten Feldinhalt fliegt das Dok dann aus der View raus und GetNextDocument verhaspelt sich.

Wäre das plausibel? Wenn ja, wie umgehe ich dieses Problem? Mit einer ViewEntryCollection? Wenn nein, was könnte die Ursache für die ausgelassenen Dokumente sein?

Freu mich auf Euren Input.
Titel: Re: NotesView.GetNextDocument - Dokumente werden ausgelassen?
Beitrag von: MadMetzger am 06.12.06 - 14:09:11
Deine Erklärung klingt für das Phänomen scheint für mich plausibel, ich hatte schon mal ein ähnliches Problem, was aber in einer Endlosschleife resultierte.

Vielleicht machst du es mal so:
Du holst dir die Dokumente, die in der View sind, per db.Search mit der Auswahlformel der Ansicht in eine DocumentCollection.
Titel: Re: NotesView.GetNextDocument - Dokumente werden ausgelassen?
Beitrag von: koehlerbv am 06.12.06 - 14:09:44
Verehrter Freund, Ober-Admin und manchmal auch Designer,

wenn - während der Agent durch eine Ansicht semmelt - dort Dokumente verschwinden (ob gelöscht oder wegen geänderter Bedingungen), dann kommt GetNextDocument tatsächlich aus dem Tritt.

Insofern ich Deinen Fall jetzt beurteilen kann, wäre es wohl das einfachste, wenn das NextDocument schon instantiiert würde, BEVOR Feldänderungen zur Verbannung des aktuell in Bearbeitung befindlichen Dokuments aus der Ansicht führen.

Also:
GetFirstDocument
Do While Not
- Set docNext = GetNextDocument (docAct)
- Bearbeite docAct
- docAct = docNext
Loop

Alternativ kann man natürlich auch mit NotesView.AllEntries eine NotesViewEntryCollection bilden, die dann ja von einer view selection formula unabhängig ist. Doch wozu ... Obiges Verfahren spart Objekte.

HTH & beste Grüsse nach Wien,
Bernhard
Titel: Re: NotesView.GetNextDocument - Dokumente werden ausgelassen?
Beitrag von: MadMetzger am 06.12.06 - 14:15:54
Das ganze hat gegenüber meiner Idee sogar noch einen entscheidenden Vorteil: Ändert sich die SelectionFormel der Ansicht, müsste man auch das db.Search anpassen, was aber schnell mal vergessen werden kann... --> Bernhards Lösung wählen  ;)
Titel: Re: NotesView.GetNextDocument - Dokumente werden ausgelassen?
Beitrag von: koehlerbv am 06.12.06 - 14:39:09
Markus, dann breche ich mal eine Lanze für Deine Variante: Ab R6 kannst Du mit NotesView.SelectionFormula eben diese auslesen und für Dein NotesDatabase.Search verwenden. Eine Umprogrammierung wäre somit nicht erforderlich.

Bernhard
Titel: Re: NotesView.GetNextDocument - Dokumente werden ausgelassen?
Beitrag von: m3 am 06.12.06 - 14:58:03
Danke die Herren, es ist eine Freude zu sehen, wie schnell und Kompetent einem hier geholfen wird.

Ich werde Bernhards Ansatz wählen, da er mir a) logisch erscheint und b) kauminvasiv ist (das ist Code, den ich geerbt habe, da will ich eigentlich so wenig wie möglich ändern).

Markus, Dein Ansatz hat auch was, aber Bernhards Lösung erscheint mir in diesem Fall die praktikablere.

Danke für Eure Zeit!
Titel: Re: NotesView.GetNextDocument - Dokumente werden ausgelassen?
Beitrag von: datenbanken24 am 06.12.06 - 22:14:42
Es gibt noch einen dritten Weg,
der sehr einfach ist und gleichzeitig die Performance des Agenten erhöht:

Vor der Schleife eine Zeile:

View.AutoUpdate=False

danach wieder:

View.AutoUpdate=True

Die Ansicht bleibt solange "false" aktiv ist in der gleichen Reihenfolge,
auch wenn Docs gespeichert werden.
Auch wird die Ansicht nicht nach jedem Speichern eines Docs neu indiziert,
was ordentlich Performance bringt. (abhängig von der Anzahl der wirklichen Doc Saves)

Gruß,
Uwe

Titel: Re: NotesView.GetNextDocument - Dokumente werden ausgelassen?
Beitrag von: m3 am 07.12.06 - 07:16:18
Hallo Uwe,

ja klingt auch nicht schlecht. Mal schaun, ob meine bisherigen Änderungen helfen. Wenn nicht, ist View.AutoUpdate=False dran.  ;D