Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TMC am 03.10.03 - 16:30:19
-
Hi,
hier ist ja schon ein Hinweis: Thread @Today (http://www.atnotes.de/index.php?board=5;action=display;threadid=10260)
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
-
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):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
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
-
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..?)
-
@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
-
@Rob:
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..?)
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:
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.
Der Anwendungszweck lässt es durchaus zu.
Also vielen Dank Euch beiden.
TMC
-
die User können - nur zur Sicherheit, falls es nicht klar ist - immer noch manuell die View refreshen (per F9) und sehen den aktuellsten Dokumentenstand, wenn das notwendig sein sollte.