Autor Thema: NotesView.Refresh  (Gelesen 2287 mal)

Jürgen Schomann

  • Gast
NotesView.Refresh
« am: 15.09.18 - 14:49:14 »
Ich habe  folgenden Code:

Set doc = view.GetDocumentByKey(key, True)
If doc Is Nothing Then
   Set doc = New NotesDocument(dbThis)
   ...
   Call doc.Save(True, False)
End If

In einer Schleife hole ich von einer Quelle ein Dokument und kontrolliere zuerst ,ob zu diesem Dokument bereits ein zugehöriges in der Datenbank vorhanden ist.
Dazu suche ich das zugehörige Dokument lt. Schlüssel in einer Ansicht in dieser Dattenbank.
Wenn es nicht gefunden wurde, wird es in der Datenbank angelegt und gespeichert.
Danach hole ich das nächste Dokument aus der Quelle und wiederhole den Vorgang.

Meine Frage ist, ob ich vor dem Suchen in der View über

Call view.Refresh

eine Aktualisierung der Ansicht vornehmen muss, da ja während des Ablaufs neue Dokumente erstellt werden?
Andererseits steht in der Notes Hilfe bei NotesView.Refresh u. a.

By default, refresh is automatic when view navigation touches an update. See AutoUpdate.

und NotesView.AutoUpdate ist doch standardmäßig 'True'.

Als ob ich doch kein Refesh brauche? Dies verstehe ich nicht ganz.

Gruß Jürgen

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: NotesView.Refresh
« Antwort #1 am: 16.09.18 - 10:21:24 »
Wenn ich mir unsicher bin, probiere ich das in der Praxis aus, das ist besser, als darüber zu sinnieren, wie eine Doku, die im Zweifelsfall auch noch falsch ist, gemeint sein könnte. Ein Script, das in einer Datenbank ein Dokument erstellt und danach über den Schlüssel in einer Ansicht dieses Dokument sucht, ist schnell geschrieben. Danach weißt Du, wie es in der Praxis ist.

Mit einer kleinen Anpassung Deines Scriptes umgehst Du das Problem und gewinnst bei einer großen Ansicht möglicherweise etwas an Performance

Code
Dim merker List As Integer

If Not IsElement (merker (key)) Then 
   Set doc = view.GetDocumentByKey(key, True)
   If doc Is Nothing Then
      Set doc = New NotesDocument(dbThis)
      ...
      Call doc.Save(True, False)
   End If
   merker (key) = 1
End If

EDIT: Da fehlte eine Klammer, nicht, dass ich pingelig wäre ...
EDIT2: Und natürlich sollte der merker auch dann gesetzt werden, wenn das Dokument in der Ansicht gefunden wurde, also außerhalb des inneren If
« Letzte Änderung: 16.09.18 - 14:31:46 von Peter Klett »

Jürgen Schomann

  • Gast
Re: NotesView.Refresh
« Antwort #2 am: 16.09.18 - 14:08:14 »
Hallo Peter,

danke für deine Antwort und die Idee mit dem merken der gesuchten Schlüssel.
Ich werde das mal so umsetzen. Es ist ja auch viel besser, da ich ja nur wissen will ob so ein Dokument schon durch ist und dies statistisch erfassen.
Übrigens bei meinem Test ohne Refresh klappte es so wie geschrieben . Ich hatte da aber auch nur 5 Dokumente.
In der Doku ist allerdings bei Notesview.Refresh auch ein Beispiel, wo das Refresh ausdrücklich benutzt wurde und dies so begründet wurde, dass andernfalls
das neu erstellte Dokument nicht gefunden würde. Also eigentlich zwei widersprüchliche Aussagen?

Vielen Dank noch einmal und einen schönen Sonntag
Gruß Jürgen

Offline Ralf_B

  • Aktives Mitglied
  • ***
  • Beiträge: 144
  • Geschlecht: Männlich
Re: NotesView.Refresh
« Antwort #3 am: 17.09.18 - 17:58:51 »
Hallo Jürgen,

ich benutze NotesView.AutoUpdate = true / false seit ich mal auf die Nase gefallen bin.
Wir haben Agenten die mehrere Stunden in DB's laufen und in einer Ansicht per "view.getnextdoument(doc)" die Dokumente anpassen.
Wenn solche Agenten laufen und sich während der Laufzeit die Ansicht ändert (Dokumente hinzukommen) hast Du mit view.Getnextdocument ev. das Problem, dass nicht alle Dokumente der Ansicht abgearbeitet werden und ev. auch der Agent das Dokument lädt aber die Änderungen in ein anderes Dokument schreibt.

Daher ist es lohnend diesen Parameter zu benutzen um die Ansicht "einzufrieren" (solle dann eh eine versteckte Ansicht sein) und nach dem Lauf diese wieder mit NotesView.AutoUpdate=true zu reaktivieren.
PS:Ähnlich sind ja solche bekannten Probleme mit view.GetNthDocument ......   ziemlich ähnlich.

Gruß
Ralf

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz