Autor Thema: In Ansicht nach einem Datum größergleich Heute suchen  (Gelesen 2159 mal)

Offline rhgoe

  • Frischling
  • *
  • Beiträge: 4
Ich habe eine Ansicht, die nach Datum sortiert ist. Das Feld ist CalendarDatetime.
Jetzt möchte ich in dieser Ansicht alle Dokumente finden, die in der Zukunft liegen. Kein Problem, wenn es ein Dokument für heute oder morgen gibt - was aber, wenn das nächste Zukunfstdokument erst in 3 Wochen liegt?
Welche Methode der Class NotesView eignet sich da am besten? Und wie formuliere ich den Such-Key am geschicktesten?

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: In Ansicht nach einem Datum größergleich Heute suchen
« Antwort #1 am: 27.09.13 - 10:19:32 »
Hallo,

Spontan wuerde ich sagen NotesView.FTSearch.

Oder Du baust Dir die Ansichts-Selection der Dokumente sinngemaess mit
NotesDatabase.Search nach Deinen Wuenschen zusammen.


Andreas

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: In Ansicht nach einem Datum größergleich Heute suchen
« Antwort #2 am: 27.09.13 - 10:21:34 »
Muss es unbedingt in einer Ansicht sein?

Ich würde das mit einem NotesDatabase.Search lösen

Set col = db.Search (|... & Calenderdatetime > @Today|, Nothing, 0)

... steht für andere Selektionsformeln, z.B. die aus Deiner Ansicht.

Wobei noch zu klären wäre, was "Zukunft" bedeutet. Wenn jetzt 27.09.2013 10:19 ist, ist dann ein Dokument 27.09.2013 10:20 Zukunft oder sollen es erst Dokumente ab morgen sein? Entsprechend musst Du natürlich die Formel anpassen.

Offline rhgoe

  • Frischling
  • *
  • Beiträge: 4
Re: In Ansicht nach einem Datum größergleich Heute suchen
« Antwort #3 am: 27.09.13 - 10:27:56 »
Ich möchte in der Mail-Datenbank, auf die ich design-mäßig keinen Zugriff habe, Termine suchen. Daher dachte ich, in einer Ansicht, die schon mal nur Termine enthält und deren erste Spalte nach Terminen sortiert ist, ginge die Suche schneller.
Aber db.search klingt interessant. Werde ich mal probieren. Vielen Dank!

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: In Ansicht nach einem Datum größergleich Heute suchen
« Antwort #4 am: 27.09.13 - 10:52:46 »
... auf die ich design-mäßig keinen Zugriff habe ...
Und genau deshalb zwingt sich ein db.Search nahezu auf. Was passiert mit Deiner Routine, wenn in der nächsten Version diese Ansicht nicht mehr existiert, oder die Spalten geändert wurden?

Ein db.Search ist unabhängig von Ansichten und gerade in solchem Kontext immer vorzuziehen.

Offline rhgoe

  • Frischling
  • *
  • Beiträge: 4
Re: In Ansicht nach einem Datum größergleich Heute suchen
« Antwort #5 am: 27.09.13 - 11:17:51 »
Ok, leuchtet unmittelbar ein.
Aber wie kriege ich denn die Document-Collection, die ich als Ergebnis bekomme, dann nach Datum sortiert?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: In Ansicht nach einem Datum größergleich Heute suchen
« Antwort #6 am: 27.09.13 - 11:47:10 »
M.W. gibt es dafür keine Standardroutine in Notes. Ich mache sowas ungefähr so:

Hole die Collection mittels db.Search
Erstelle eine Liste aller Dokumente, etwa so

Dim dokumente List As NotesDocument
Set doc = col.GetFirstDocument
Do While Not doc Is Nothing
   Set dokumente (doc.UniversalID) = doc
   Set doc = col.GetNextDocument (doc)
Loop

Erstelle eine neue Collection ohne Dokumente

Suche in der Liste das Dokument mit dem kleinsten Eintrag (falls aufsteigend sortiert werden soll), füge es der Collection hinzu und lösche es aus der Liste.
Im Beispiel nehme ich einfach ein Textfeld, musst Du natürlich anpassen

Dim vgl As String
Dim id As String
Do
   vgl = "ZZZZZZZZZ" 'kann auch irgendetwas anderes sein, darf nur nicht in den Werten vorkommen
                                 'und es darf keinen größeren Wert geben
   id = ""
   Forall dokument in dokumente
      If dokument.Feld (0) < vgl Then
         vgl = dokument.Feld (0)
         id = dokument.UniversalID
      End If
   End Forall
   If id = "" Then
      'Kein Dokument mehr in der Liste
      Exit Do
   End If
   'hier dann dokumente (id) der Collection hinzufügen, sowas wie Call sortcol.AddDocument oder so, habe ich gerade nicht im Kopf
   'Anschließend Dokument aus der Liste entfernen
   Erase dokumente (id)
Loop

Soll nur eine Skizze sein ...

Wenn es zuviele Dokumente sind, kannst Du auch die Liste der Dokumente durch eine Liste von Integern ersetzen und holst Dir jeweils das zu verwendende Dokument über den Listtag. Das ist aber nach meinen Erfahrungen erst ab etwa 30.000 Dokumenten notwendig (sicherlich in Abhängigkeit der Größe der Dokumente und dem verfügbaren Arbeitsspeicher).
« Letzte Änderung: 27.09.13 - 11:53:27 von Peter Klett »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz