Domino 9 und frühere Versionen > Entwicklung
Geänderte Doks der letzten 30 Tage wie am performantesten anzeigen
TMC:
Hi,
hier ist ja schon ein Hinweis: Thread @Today
Allerdings nur zuverlässig möglich über UpdAll auf den Servern.
Gefahr aus meiner Sicht: wird bestimmt vergessen, wenn mal eine neue Replik angelegt wird auf einem anderen Server.
Daher brauche ich eine Lösung, die rein datenbankbasiert ist.
Es sollen in einer View/Folder alle Doks angezeigt werden, deren Änderungsdatum > @Today-30 Tage ist.
Folgende Möglichkeiten hab ich mir überlegt:
- Nachts und Mittags um 12:30 Uhr (muss leider sein) ein Agent, der alle betreffenden Docs in einen Folder schiebt
- Newsletter erstellen lassen per Click auf "Änderungen der letzten 30 Tage" und in einer Dialogbox anzeigen
- Ansicht basteln mit SELECT checker = "1". Nachts und Mittags läuft ein Agent, der das Feld "checker" mit "1" füllt, wenn Änderungsdatum > @Today-30
Wie würdet Ihr denn das realisieren?
Folder mag ich persönlich nicht so gern aus den bekannten Gründen (z.B. bei Designänderung im Folder...).
Grüße,
TMC
TMC:
OK, hab mich nun für Alternative 3 entschieden, erscheint mir auch am sinnvollsten.
Hier der Agent (d.h. jetzt wird das Feld 30days geleert, sobald nicht mehr zutreffend):
--- Zitat ---Sub Initialize
'##############################################################################
'Setzt das Feld 30days auf "", wenn Freigabedatum < HEUTE-30Tage ist
'##############################################################################
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As NotesView
Dim nextdoc As notesdocument
Dim v_d30 As String
Dim v_heute As String
Dim v_freigabe As String
Dim v_ddif As Integer
Set db = session.CurrentDatabase
Set view = db.GetView("(30days)")
Set doc = view.GetFirstDocument()
'setze heutiges Datum
v_heute = Today()
Do Until doc Is Nothing
Set nextdoc = view.getnextdocument(doc)
'Docwerte einlesen
v_d30 = doc.30days(0)
v_freigabe = doc.Dat(0)
'Differenz berechnen
v_ddif = Datevalue(v_heute) - Datevalue(v_freigabe)
'Messagebox(v_ddif)
'nun die Aktionen....
If v_d30 = "1" And v_ddif > 30 Then
doc.30days = ""
Call doc.Save(True,False, False)
End If
Set doc = nextdoc
Loop
End Sub
--- Ende Zitat ---
Was mich noch nervt ist, dass ich dafür auf eine View zugreife, die folgende Ansichtsauswahl hat:
SELECT FORM = "frm_12" & Status = "test1" & 30days != ""
Wie könnte ich denn das noch ins Script integrieren?
Dim dc As NotesDocumentCollection
Set dc = db.AllDocuments
ist klar, die Änderungen von "view.getnextdocument" auf "dc.getnextdocument" etc. auch.
Aber wie kann ich noch abprüfen auf Form, Status, 30days?
Ich hab da jetzt schon vieles ausgetestet, ohne Erfolg.
Performant soll das ganze natürlich auch sein.....
TMC
Rob Green:
wie wärs damit, den Viewindex alle X Stunden neu berechnen zu lassen und nicht bei jeder Änderung? Dann macht auch ne Today Formel im Select nicht viel aus, was die Perfomance angeht. Wo man das einstellt? In den Eigenschaften der View, letzte Lasche der Dialogbox (Letzte? Oder..?)
koehlerbv:
@Today in Ansichtsauswahlformeln wird mir etwas zu pauschal verdammt: Aus meiner Erfahrung (und ich verwende die "böse Formel" selbst in Ansichten) hängt das sehr von der Anzahl der zu erwartenden Docs (und deren Grösse etc.) in der DB ab, ob man einen Performanceeinbruch spürt oder nicht. Wenige Tausend Dokumente stellen in der Regel kein Problem dar.
Wenn der Anwendungszweck es zuläßt, ist auch Rob Greens Vorschlag nicht zu verachten. Hier gilt aber wie bei Deiner Agent-Lösung: Der Anwender darf dann nicht die Erwartungshaltung haben, sein Dokument unmittelbar nach Erstellung in der 30-Tage-Ansicht vorzufinden.
Was Deine Frage mit NotesDatabase.AllDocuments angeht: Mit folgendem einfachen If-Statement kannst Du das Problem lösen:
Set doc =(Deine Schleife durch die collection)
If doc.Form (0) = "...." then
If doc.Status (0) = "..." and doc.30days (0) <> "" then
........
End If
End If
(Ende Deiner Schleife durch die collection)
HTH,
Bernhard
TMC:
@Rob:
--- Zitat ---wie wärs damit, den Viewindex alle X Stunden neu berechnen zu lassen und nicht bei jeder Änderung? Dann macht auch ne Today Formel im Select nicht viel aus, was die Perfomance angeht. Wo man das einstellt? In den Eigenschaften der View, letzte Lasche der Dialogbox (Letzte? Oder..?)
--- Ende Zitat ---
Das ist ja eine Prima-Alternative.
Ich hab jetzt eine @Today-Formel in der Ansichtsauswahl und mal bei 'Refresh Index' auf 'Auto, at most every 6 hours' eingestellt.
Lokal ist auch der Aktualisierungskringel weg. Jetzt schau ich dann noch wie es sich auf dem Server verhält.
@Bernhard:
--- Zitat ---Wenn der Anwendungszweck es zuläßt, ist auch Rob Greens Vorschlag nicht zu verachten. Hier gilt aber wie bei Deiner Agent-Lösung: Der Anwender darf dann nicht die Erwartungshaltung haben, sein Dokument unmittelbar nach Erstellung in der 30-Tage-Ansicht vorzufinden.
--- Ende Zitat ---
Der Anwendungszweck lässt es durchaus zu.
Also vielen Dank Euch beiden.
TMC
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln