Autor Thema: Dokumente mit bestimmten Feldinhalt zählen  (Gelesen 2775 mal)

TomLudwig

  • Gast
Dokumente mit bestimmten Feldinhalt zählen
« am: 19.09.03 - 11:47:31 »
Hallo ich habe folgendes Problem:

Ich muss eine Datenbank für die Schulungsorganisation schreiben.
Jedesmal, wenn man sich anmeldet wird ein Dokument gespeichert in dem ein Feld mit dem dazugehörigen Schulungsnamen steht.

Wenn sich jetzt z.B. 6 Personen für eine Schulung angemeldet haben soll automatisch eine Mail an den Dozenten verschickt werden.

Wie kann ich jetz z.B. alle Dokumente durchgehen und die Dokumente zählen in denen z.B. "Word" steht?

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #1 am: 19.09.03 - 12:16:10 »
Hallo Tom,
wenn Du über der Datenbank ein FTSearch durchführst, erhältst Du eine DocumentCollection, die alle Dokumente enthält, in denen "Word" erwähnt wird. Die Eigenschaft Count von der DocCol sagt Dir, wieviele das sind.

Thomas
+++To be human is more important than to be important!+++

Driri

  • Gast
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #2 am: 19.09.03 - 12:19:24 »
Das hieße allerdings, daß in der Datenbank nur unerledigte Anmeldungen sein dürfen, denn sonst bekommt man ja auch die Dokumente als Treffer, für die eine Schulung bereits stattgefunden hat.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #3 am: 19.09.03 - 12:24:04 »
Für FTSearch müsste dann aber ein entsprechender QueryString her, der sich auf's betreffende Feld bezieht. Sonst findet die Suche ja ggf. auch Dokumente, in den der Begriff an einer völlig zusammenhanglosen Stelle steht.
Besser wäre m.E., eine entspr. View zu erstellen und dort mit GetAllDocumentsByKey zu suchen.

Aber mal 'ne ganz andere Frage: Wie soll denn das überhaupt getriggert werden? Wie willst Du sicherstellen, daß das Mail nur ein einziges Mal versandt wird? Welchen weiteren Background gibt es da, welche Pläne?

Bernhard

TomLudwig

  • Gast
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #4 am: 19.09.03 - 13:21:09 »
Gut, erstmal danke....

Mit dem Code hier gehts... wobei jedesmal das komplette Dokument durchsucht wird... Ich versuchs noch mit GetAllDocumentsByKey

   Dim ns As New NotesSession
   Dim db As NotesDatabase
   Dim nv As NotesView
   Dim flgcnt As Long
   
   Set db = ns.CurrentDatabase
   Set nv = db.GetView("($AllBookedSchulungen)")
   flgcnt = nv.FTSearch("Word Grundlagen", 0)
   
   Messagebox flgcnt

Jetzt muss ich dann noch rausfinden, wie man eine E-Mail versendet...
Und ansonsten muss ich mir noch was einfallen lassen, dass wenn der Kurs stattgefunden hat, die Dokumente wieder gelöscht werden.
Hat jemand eine Ahnung, oder Idee?

Glombi

  • Gast
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #5 am: 19.09.03 - 13:32:38 »
Hi,
ich würde mit der Search (nicht FTSearch) Methode arbeiten. Du kannst Deinen Suchstring analog zu einer Ansichtszugriffsformel machen.


dim session as NotesSession
dim db as NotesDatabase
dim dc as NotesDocumentCollection
dim searchstring as String

'... Settings...

searchstring = |Form = "xyz" & @Contains(Feldname;"Word") & Status = "offen"|
set dc = db.Search(searchstring,nothing,0)

dc.Count liefert Dir dann die Anzahl der Treffer. In dem Searchstring kannst Du explizit das Feld angeben.

Das mit dem Mail geht dann so:

dim maildoc as NotesDocument
set maildoc = db.CreateDocument
maildoc.Form = "Memo"
maildoc.SendTo = "Name des Mailempfängers"
maildoc.Subject = "Thema der Mail"
call maildoc.Send(false)

Andreas

TomLudwig

  • Gast
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #6 am: 19.09.03 - 13:44:47 »
Also ich habs mit dem code hier ausprobiert:

   Dim ns As NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim searchstring As String
   Dim flgcnt As Long
   
   Set db = ns.CurrentDatabase
   searchstring = |Form = "($AllBookedSchulungen)" & @Contains(Schulung;"Word Grundlagen")|
   
   Set dc = db.Search(searchstring,Nothing,0)
   flgcnt = dc.Count
   
   Messagebox flgcnt
   

Funktioniert aber nicht. Es kommt die Fehlermeldung "Object Variable Not set"

An was kann das liegen? Und warum schreibt man bei dem searschstring die Anweisung in | - Zeichen ?

Glombi

  • Gast
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #7 am: 19.09.03 - 13:53:34 »
Die Session ist nicht gesetzt es fehlt
set ns = New NotesSession

Das Pipe-Zeichen zeigt Beginn und Ende eines String an. Es ist

"Das ist ein String"
|Das ist ein String|
{Das ist ein String}

Wenn Du | verwendest, sparst Du Dir die "" also,
"Das ist ein String in dem ein Wort in ""Hochkomma"" steht"
|Das ist ein String in dem ein Wort in "Hochkomma" steht"|

{Das ist ein String in dem ein Wort in "Hochkomma" und ein Pipe | steht steht"}


In Deinem Code ginge bspw. auch
searchstring = "Form = ""($AllBookedSchulungen)"" & @Contains(Schulung;""Word Grundlagen"")"

wenn Du in der Formelsprache ein Oder = | verwendest, solltest Du mit {...} arbeiten.


Andreas


« Letzte Änderung: 19.09.03 - 13:55:30 von Glombi »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #8 am: 19.09.03 - 13:55:31 »
Ich rate nach wie vor von FTSearch oder Search ab, da es mit GetAlDocumentsByKey einfacher und performanter geht.
Das Pipe-Symbol wird verwendet, um sich mit Anführungszeihen in Anführungszeichen nicht den Wolf zu tippen: | ist de facto ein "Über-Anführungszeichen" und ermöglicht es auf übersichtliche Weile, einen String mit enthaltenenen Anführungszeichen zu schreiben, wie er ja z.B. von Search gefordert wird.

Zum Code: Was sagt der Debugger ?

Euer Plan ist mir aber nach wie vor nicht ganz klar ... Da fällt es schwer, Ratschläge zu geben.

HTH,
Bernhard

TomLudwig

  • Gast
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #9 am: 19.09.03 - 14:00:24 »
Ich würds auch lieber mit GetAllDocumentsByKey machen.

Aber bei:

NotesView.GetAllDocumentsByKey("Word)

regt sich bei mir nichts, bzw. wird nichts gefunden. Es kommt immer 0 raus

TomLudwig

  • Gast
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #10 am: 19.09.03 - 14:06:43 »
Hier nochmal der komplette Quelltext mit GetAllDocumentsByKey:
Es kommt immer 0 raus. Obwohl min. 3 Dokumente drin sind.

   Dim ns As New NotesSession
   Dim db As NotesDatabase
   Dim nv As NotesView
   Dim dc As NotesDocumentCollection
   Dim flgcnt As Long
   Dim Schulung As String
   
   Schulung = "Word Grundlagen"
   
   Set db = ns.CurrentDatabase
   Set nv = db.GetView("($AllBookedSchulungen)")
   Set dc = nv.GetAllDocumentsByKey(Schulung)
   
   flgcnt = dc.Count
   
   Messagebox flgcnt

WARUM?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #11 am: 19.09.03 - 14:07:48 »
Wie sieht es denn in der von Dir gewählten Ansicht aus ? Ist die erste Spalte sortiert ? Was passiert, wenn Du direkt in der View "Word" eingibst (die normale Notes-Ansichtssuche also) ?

Bernhard

TomLudwig

  • Gast
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #12 am: 19.09.03 - 14:11:13 »
Oh verdammt... Ich hab vergessen die erste Spalte (in der das Schlüsselwort steht) sortieren zu lassen *manbinichdumm*

Danke....


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Dokumente mit bestimmten Feldinhalt zählen
« Antwort #13 am: 19.09.03 - 14:27:24 »
Das ist einer der beliebtesten Fehler, wenn man sich "mal schnell" 'ne neue Ansicht bastelt - und glaube ja nicht, davon sind die "alten Hasen" verschont.
Noch ein Tip, um sich späteren Ärger zu vermeiden:
Wird eine Ansicht programmatisch benötigt (wie hier für Dein NotesView.GetAllDocumentsByKey), dann verstecke diese Ansicht (Namen in Klammern setzen). Dies hat nicht nur den Vorteil, daß Ottonormaluser das hässliche Ding nicht sieht, sondern sagt Dir später vor allem eins: "Diese Ansicht ist nicht für User, sondern für's Programm erforderlich!" und sollte Dich davon abhalten, ohne Kontrolle Änderungen darin zu machen. Nichts ist ärgerlicher, als wenn man unbedacht folgendes macht: "Ach, hier habe ich ja schon so eine Ansicht. Die nehme ich her und ändere mal die erste Spalte (oder füge eine vorne ein oder ...)". Und erst später stellt sich heraus, daß auf einmal eine ganz andere Funktion nicht mehr tut, wie soll ...  Selbstverständlich kann man auch andere Namenskonventionen für programminterne Ansichten verwenden oder oder ...
By the way: Selbst, wenn es für die User schon eine Ansicht gibt, die ich für NotesView.Get.... oder @dbColumn oder @dbLookup verwenden könnte, nehme ich diese niemals her, sondern mach notfalls sogar eine Kopie davon.

HTH,
Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz