2017-08-30 2 views
0

Ich möchte eine Ansicht erstellen, die nur die neuesten Dokumente enthält (neuer als 2 Monate). Ich bin mit diesem select formular:Anmerkungen Formel Sprache Datum Unterschied

SELECT @IsAvailable($Conflict) and docForm="ServiceOrders" and (@Today-PosDesValidFrom)<5259600 

Wo die 5.259.600 die 2 Monate in Sekunden, weil ich gelesen, dass der - Operator die Zeitspanne in Sekunden zurück. Ich habe keine Ergebnisse in meiner Sicht.

Antwort

1

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.
enter image description here
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: enter image description here

+0

, die eine sehr intelligente Idee, unglückliche Sache ist, dass ich nicht die Erlaubnis habe, neue Felder in den Formularen zu erstellen. – Curunir

+0

Aus irgendeinem Grund bekomme ich hier einen Typkonflikt auf cutoffDate: CDat (validDate.dateOnly)> = CDat (cutoffDate) – Curunir

+0

@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