Nie Verwenden Sie @Today oder @Now in Ansicht Auswahl Formeln. Der View-Index wird dann nie auf dem neuesten Stand sein, daher wird der Update-Task ständig ausgeführt, um den Index zu aktualisieren. Dies wirkt sich negativ auf die Leistung aus.
Was Sie tun sollten, ist ein täglicher (in Ihrem Fall wahrscheinlich nächtlicher) Agent, der die Dokumente markiert, die in der Ansicht angezeigt werden sollen. Um den Agenten so schnell wie möglich zu machen, verarbeiten Sie eine Ansicht, in der Sie das Datum in einer der Spalten anzeigen.
Die absolut schnellste wäre wie folgt:
1) Erstellen Sie eine versteckte Ansicht namens (LookupServiceOrdersByValidDate)
.
2) Die erste Spalte enthält den Feldnamen PosDesValidFrom
(ich gehe davon aus, dass es ein Datumsfeld ist, sonst müssen Sie es in Datum konvertieren), und absteigend sortiert werden. Gehen Sie zur vierten Registerkarte in der Infobox für die Spalte und stellen Sie sicher, dass Sie auf Datum/Uhrzeit eingestellt haben.
3) Erstellen Sie eine zweite Spalte, in der Sie das Textfeld DisplayIn2MonthView
anzeigen. Absteigend sortieren.
4) Speichern Sie die Ansicht.
Sie haben jetzt eine Ansicht, die Sie mit einem Agenten durchlaufen können. Da es absteigend mit dem neuesten an der Spitze sortiert wird, sobald Sie ein Datum mehr als 2 Monate zurück erreichen, können Sie den Agenten stoppen und fertig sein. etwa wie folgt aussehen
Das Skript würde:
Dim session as New NotesSession
Dim db as NotesDatabase
Dim view as NotesView
Dim col as NotesViewEntryCollection
Dim entry as NotesViewEntry
Dim doc as NotesDocument
Dim validDate as NotesDateTime
Dim cutoffDate As NotesDateTime
' Get current date and time and go back 2 months
Set cutoffDate = New NotesDateTime(Now())
Call cutoffDate.AdjustMonth(-2)
' Drill down to view
Set db = session.CurrentDatabase
Set view = db.GetView("(LookupServiceOrdersByValidDate)")
' Create a collection of all entries in the view and loop through them
Set col = view.AllEntries
Set entry = col.GetFirstEntry()
Do Until entry is Nothing
' Get value in first column in view and use it to create new DateTime object
validDate = New NotesDateTime(entry.ColumnValues(0))
' Check if we are within the 2 month cutoff date
If Cdat(validDate.dateOnly)>=Cdat(cutoffDate) Then
' Get document and set flag to display
Set doc = entry.Document
Call doc.ReplaceItemValue("DisplayIn2MonthView","Yes")
Call doc.Save(True,False)
Else
' We are beyond the cutoff date, but we need to clear old flags.
' Read the value in the second column and see if it is "Yes"
If entry.ColumnValues(1)="Yes" Then
Set doc = entry.Document
Call doc.ReplaceItemValue("DisplayIn2MonthView","")
Call doc.Save(True,False)
Else
' Since all "Yes" values should be at the top, if we
' get here there should be no more flagged documents.
Exit Do
End If
End If
Set entry = col.GetNextEntry(entry)
Loop
Print "All done."
Schließlich ändern Sie die Ansicht, die Dokumente angezeigt werden soll. Sie sollten wahrscheinlich das Feld Form
verwenden, nicht docForm
. Setzen Sie die Auswahlformel auf
SELECT [email protected]($Conflict) AND Form="ServiceOrders" AND DisplayIn2MonthView="Yes"
Die Ansicht sollte jetzt nur die ServiceOrder-Dokumente mit einem ValidDate innerhalb der letzten 2 Monate enthalten. Wenn Sie wirklich nur die Replikation/speichern Konflikte in der Ansicht möchten, stellen Sie sicher, dass der Blick auf nicht Anzeige Antwortdokumente in einer Hierarchie (deaktivieren Sie das Kästchen) gesetzt ist:
, die eine sehr intelligente Idee, unglückliche Sache ist, dass ich nicht die Erlaubnis habe, neue Felder in den Formularen zu erstellen. – Curunir
Aus irgendeinem Grund bekomme ich hier einen Typkonflikt auf cutoffDate: CDat (validDate.dateOnly)> = CDat (cutoffDate) – Curunir
@exasswede Diese Lösung funktioniert für mich, aber das Problem ist, dass eine neue Reihenfolge erst sichtbar erscheint Agent läuft über die Ansicht. – Curunir