Autor Thema: SELECT Formel optimieren  (Gelesen 1707 mal)

Offline Dr 84

  • Frischling
  • *
  • Beiträge: 29
  • Geschlecht: Männlich
SELECT Formel optimieren
« am: 14.03.14 - 14:21:53 »
Hallo zusammen,

eine Ansicht in der DB hat folgende SELECT Formel:
Code
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?

Glombi

  • Gast
Re: SELECT Formel optimieren
« Antwort #1 am: 14.03.14 - 14:38:45 »
Also ich mache es so:
Erstelle einen Agenten, der einmal nachts das aktuelle Tagesdatum in ein Feld der Dokumente schreibt und vergleiche dann mit dem Feld.

Oder sowas:
http://atnotes.de/index.php/topic,10260.0.html

Andreas

Offline Dr 84

  • Frischling
  • *
  • Beiträge: 29
  • Geschlecht: Männlich
Re: SELECT Formel optimieren
« Antwort #2 am: 14.03.14 - 14:52:55 »
Danke Glombi! Top tipp.

Mitch

  • Gast
Re: SELECT Formel optimieren
« Antwort #3 am: 14.03.14 - 14:58:34 »
Huhu,

oder du schreibst einen Agenten der die Select-Formel der Ansicht jede Nacht ändert, so dass das Datum fix drin steht. Das könnte bei großen Dokumentenzahlen und/oder Repliken vielleicht performanter sein.

Oder du markierst bestimmte Dokumente über Nacht. Zum Beispiel könnten alle Dokumente in denen das Wiedervorlagedatum erreicht ist mit einem neuen Item geflaggt werden. Dann kannst du Ansichten bauen für Doks die dieses Item haben oder eben nicht haben. Musst dann natürlich dran denken das Item ggf. wieder zu entfernen, z.B. wenn sich das Wiedervorlagedatum verschiebt oder entfernt wird.

Gruß,

Mitch

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: SELECT Formel optimieren
« Antwort #4 am: 14.03.14 - 19:02:00 »
Ich würde nicht jedes Dokument jeden Tag mit dem aktuellen Tagesdatum ändern, sondern per Agent den benötigten Status setzen, z.B. zukünftig, oder abgelaufen, dann brauchst Du das Dokument nur einmal zu ändern, und nicht täglich.

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: SELECT Formel optimieren
« Antwort #5 am: 17.03.14 - 11:04:22 »
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:

Code
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:

Code
_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.
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz