Hallo zusammen,
eine Ansicht in der DB hat folgende SELECT Formel:
SELECT (form = "LNPrep" | form="Leistungsnachweis") & ad_delete !="1" & @Date(ln_wvg) > @Today & orphan!="1" & hide != "1"
Die Auswertung "@Date(ln_wvg) > @Today " (Datum der Wiedervorlage liegt in der Zukunft) macht die Ansichtaufbau sehr sehr langsam..
Wie kann ich diese Formel optimieren?
Alle Dokumente anfassen ist gar nicht nötig - es geht auch, die Selektions- und/oder Spaltenformeln der betreffenden Views mit einem zeitgesteuerten Agenten über Nacht anzupassen. Das sieht dann so aus:
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
'Name der Variablen für den Datumswert in den Views
varActStr$="_varAct"
datStrStart%=Len(varActStr$)+12
Set db = session.CurrentDatabase
views = db.Views
On Error Resume Next
Forall v In views
'Überprüfe Selektionsfomeln
org_formula$=v.SelectionFormula
If Left(org_formula$, Len(varActStr$)) = varActStr$ Then
org_formula$=v.SelectionFormula
org_dat$= Mid(org_formula$,datStrStart%,10)
new_dat$=Format(Now(),"dd.mm.yyyy")
new_formula$=Replace(org_formula$,org_dat$,new_dat$)
v.SelectionFormula=new_formula$
End If
'Überprüfe Spaltenformeln
Forall vc In v.Columns
org_formula$=vc.Formula
If Left(org_formula$, Len(varActStr$)) = varActStr$ Then
org_formula$=vc.Formula
org_dat$= Mid(org_formula$,datStrStart%,10)
new_dat$=Format(Now(),"dd.mm.yyyy")
new_formula$=Replace(org_formula$,org_dat$,new_dat$)
vc.Formula=new_formula$
End If
End Forall
End Forall
End Sub
"_varAct" ist der Kennzeichner für Views mit zu ändernden Datumswerten, die der Agent anfassen soll. Eine Spaltenformel kann dann z.B. so oder ähnlich aussehen:
_varAct:=@ToTime("17.03.2014");
@If(@ToTime(Datumsfeld)<_varAct;"Überfällig";"Im Plan");
...
In der ersten Zeile muss immer der Kennzeichner stehen, damit das Datum geändert wird. Läuft hier seit mehreren Jahren problemlos, auch über internationale Repliken.