Autor Thema: Geänderte Doks der letzten 30 Tage wie am performantesten anzeigen  (Gelesen 3178 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
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
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
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   

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
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
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..?)
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
@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

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
@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..?)

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.
Der Anwendungszweck lässt es durchaus zu.

Also vielen Dank Euch beiden.

TMC

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
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.
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz