Autor Thema: Schulungskalender  (Gelesen 7062 mal)

Offline TazDevil20

  • Frischling
  • *
  • Beiträge: 37
Re: Schulungskalender
« Antwort #20 am: 08.10.05 - 20:24:00 »
Habe noch ein wenig gesucht und hab auch ein paar sachen gefunden. Bekomme aber leider immer noch nicht den Eintrag gelöscht. Habe jetzt folgenden Code für das löschen:

Code
	'Kalendereintrag löschen
	Set eventdoc = uidoc.Document
	eventid = uidoc.FieldGetText( "DocID" )
	rc = Evaluate (|@MailDbName|)
	Set db = session.GetDatabase(rc(0), rc(1))
	
	Set dc = db.FTSearch( eventid, 0, FT_SCORES, FT_FUZZY)
	Set doc_loeschen = dc.GetFirstDocument
	Call dc.deletedocument(doc_loeschen)
	

dc habe ich natürlich auch deklariert:    Dim dc As NotesDocumentCollection

In dem Feld eventid steht auch die entsprechende ID, jedoch findet er diese aus irgend welchen Gründen nicht. Wenn ich mir wie in der Designerhilfe das dc ausgeben lasse, zeigt er nichts an.

Welchen fehler mache ich???
Michael

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Schulungskalender
« Antwort #21 am: 09.10.05 - 13:44:22 »
Liest Du aufmerksam DesignerHelp:
Zitat
NotesDocumentCollection.DeleteDocument method:

Deletes a document from a collection (not from the disk).

HTH,
Bernhard

Offline TazDevil20

  • Frischling
  • *
  • Beiträge: 37
Re: Schulungskalender
« Antwort #22 am: 09.10.05 - 18:56:56 »
Hallo,

das mit der NotesDocumentCollection.DeleteDocument method habe ich gefunden und hoffentlich auch entsprechend eingefügt. Jedoch habe ich das Problem erstmal mit dem findes des Dokuments.

Folgende Funktion soll dahinter stecken:

Deklaration:
Code
	Dim workspace As New NotesUIWorkspace
	Dim session As New NotesSession	
	Dim doc As NotesDocument
	Dim db As NotesDatabase
	Dim uidoc As NotesUIDocument
	Dim dc As NotesDocumentCollection
	Dim doc_loeschen As NotesDocument
	
	Set uidoc = workspace.CurrentDocument
	Set doc = uidoc.Document

- suche den Kalendereintrag in der Datenbank des Users mit dem Feld "DocID" das gefüllt ist mit dem Wert "eventid"
Code
	Set eventdoc = uidoc.Document
	eventid = uidoc.FieldGetText( "DocID" )
	rc = Evaluate (|@MailDbName|)
	Set db = session.GetDatabase(rc(0), rc(1), False)
	
	i= 0
	Set dc = db.FTSearch( eventid, 0, FT_SCORES, FT_FUZZY)
- wähle das erste Dokument aus
Code
	Set doc_loeschen = dc.GetFirstDocument
- gebe mir das gefunde aus (nur zum testen)
Code
	While Not(doc_loeschen Is Nothing)
		i= i +1
		message = message & i & doc_loeschen.EventName(0) & Chr(10)
		Set doc_loeschen = dc.GetNextDocument(doc_loeschen)
	Wend	
	Messagebox message,, "Search results " & 1 & " - " & dc.Count
- Lösche dieses Dokument
Code
	'Call dc.deletedocument(doc_loeschen)

Ich kann irgendwie nicht das Dokument mit der DocID finden, aber es existiert im Kalender und es besitzt auch das Feld.

Kann mir vielleicht nochmal jemand sagen, was ich da jetzt so falsch mache?

Ich denke, das ist auch das letzte mal dass ich euch mit der DB nerve  :P

mfg
Michael
Michael

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Schulungskalender
« Antwort #23 am: 09.10.05 - 20:46:31 »
Zunächst nochmal zum Löschen des Kalendereintrags: Das mit NotesDocumentCollection.DeleteDocument hast Du Dir immer noch nicht richtig durchgelesen - diese Methode löscht das Dokument lediglich aus Deiner Collection, nicht aber aus dem Kalender.

Zum Finden des Eintrags: Ich finde das Verfahren mit der FTSearch nicht so besonders glücklich, da Du nicht garantieren kannst, dass jedes Mail-File auch einen FTI hat. Aussderdem müsstest Du eine Searchformel verwenden wie FIELD DocID = "inhalt-deiner-docid".

Ein sicheres Verfahren wäre, wenn Du die UniversalIDs der erzeugten Kalendereinträge auch im Schulungsdokument speichern würdest (zweites Array, welches absolut analog zum Teilnehmer-Array aufgebaut sein muss, d.h., wenn Du einen Teilnehmer löschst, muss auch genau dessen Kalender-UNID entfernt werden). Du kannst dann mit NotesDatabase.GetDocumentByUNID höchst performant das jeweilige Dokument erreichen.

Was Du aber generell beachten musst: Du brauchst ein solides error handling. Unter anderem kann es ja ohne weiteres passieren, dass jemand solch einen Kalendereintrag Kraft seiner Wassersuppe einfach aus dem Kalender selber löscht ...

HTH,
Bernhard

Offline TazDevil20

  • Frischling
  • *
  • Beiträge: 37
Re: Schulungskalender
« Antwort #24 am: 10.10.05 - 22:10:00 »
Hallo,

mir macht es einfach Spaß euch zu quälen  ;D

Ich habe es hinbekommen, dass wenn eine Person in dem Dokument steht dieser auch den Kalendereintrag gelöscht bekommt.

Jetzt habe ich versucht das ganze auszudehen und hänge gerade an dem Problem, dass ich mehere UNIDs nicht in ein Mehrfach-Listenfeld bekomme.

Habe es mit folgendem Code versucht.
Code
tmpunid = docCurrent.GetItemValue("calunid")
newunid = Arrayappend(tmpunid, doc.UniversalID)
Call docCurrent.AppendItemValue("calunid", newunid)

Notes läuft einfach drüber und es passiert nichts.

tmpunid habe ich nicht deklariert, damit Notes damit machen kann was es will. Wenn ich es mit
Code
 Dim tmpunid As Sting 
deklariere passiert auch nichts anderes. Auf jeden Fall mag Notes es nicht wenn mal () hinter die Variable setzt.

Ich hoffe ich habe nur einen kleinen Fehler in meinem Script. Will euch doch nicht auf die Nerven gehen  ::)

Kann ich wenn ich die UNIDs richtig geschlieben habe mit
Code
 Call doc.Current.ArrayReplace(doc.UniversalID, tmpunid, newunid) 
in meinem Abmeldescript die nicht mehr benötigte UNID entfernen?

mfg
Michael
Michael

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Schulungskalender
« Antwort #25 am: 10.10.05 - 22:53:19 »
steht calunid wirklich als Mehrfachwertefeld in der Maske (kann man anhaken)?
Im übrigen ist vielleicht die Klasse NotesItem besser für diese Operationen. Bessere Kontrolle. Jedenfalls präferiere ich die meist bei Mehrfachwertefeldern.
Methoden: appendToTextList.
Und
forall itemVal in Notes.values
print itemVal
end forall

Zum entfernen eines Wertes aus den Mehrfachwerten mußt du wohl
über den gesamten Array iterieren und die Werte neu setzen.
Ausserdem hat NotesItem noch eine Contains Methdode.

Versuche v.a. das Skript in mehrere Unterroutinen zu unterteilen.
(such nach sub oder function in Hilfe).
« Letzte Änderung: 10.10.05 - 23:09:33 von kennwort »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz