Domino 9 und frühere Versionen > ND7: Entwicklung
Agent um Erinnerungsmails als Aufgaben zu übernehmen
koehlerbv:
Ich hatte mir das gestern mal nachgebaut (wenn auch ohne Agent) - und ich bekam bei neuen Dokumenten im PostSave sehr wohl eine NoteID. Habe ich das richtig verstanden: Du hattest gestern im Debugger im Appointment-Dokument NoteID im PostSave kontrolliert?
Bernhard
PS: Pete, das mit dem Vertipper hatte ich mir schon gedacht. Freudscher Vertipper würde ich aber nicht sagen (dass würde ja Abgründe Deiner Seele auftun ;D), eher lustig ... und wie es jedem von uns passieren kann ;)
Demian:
Moin Bernhard,
ja. Habe es mir jetzt nochmal angeschaut und nen größeren (Inhalt) Screenshot gemacht.
Gruß
Demian
EDIT: Ich habe es mir jetzt auch mal mit dem Mailfile meines anderen Benutzers ausprobiert. Selbes Ergebnis.
EDIT2: Bin jetzt mal hin und habe ne lokale Maildb auf Grundlage der Mail(R7) erstellt und es dort probiert. Selbes Ergebnis.
koehlerbv:
Hm, ich habe mir das jetzt mal direkt im Mailfile (ich habe mal das 7er Template hergenommen) nachvollzogen: Während es in einer "nackernden" DB klappt (ein neu erstelltes Dokument hat nach dem Speichern im PostSave bereits eine NoteID) ist dies im Mailfile (Appointment Type 4) nicht der Fall. Ich habe mir das mal für "further investigations" notiert und werde mich dringend darum kümmern - ich sehe da eine üble Wissenslücke.
Was aber sofort funktioniert: Der PostOpen-Code beginnt mit
Call Source.Document.Save (True, False, True)
Setze dahinter spassenshalber ein
Messagebox Source.Document.NoteID
und Dir wir die NoteID angezeigt (und dann natürlich auch an den Agent übergeben).
Was mir aber bei der Sache (ich konnte das nun nicht sooo tiefschürfend verfolgen) noch auffällt: Warum machst Du das eigentlich überhaupt via Agent? RunOnServer funktioniert nun ja auch nicht überall ... Warum rufst Du zum Erzeugen eines Task-Documents nicht einfach eine entsprechende Function auf?
Bernhard
Demian:
also habe jetzt folgendes ins Postopen
If Not source.IsNewDoc Then Msgbox source.Document.NoteID
und er wirft mir die Note-ID aus. Allerdings finde ich kein
Call Source.Document.Save (True, False, True)
im Postopen?
--- Zitat ---RunOnServer funktioniert nun ja auch nicht überall ...
--- Ende Zitat ---
Inwieweit? Wissenslücke in Bezug auf was?
Naja man liest ja immer wieder, dass in den Originamaildatenbanken usw. keine Änderungen vorgenommen werden sollen. Also beschränke ich mich auf die nur notwendigsten Zeilen in den Original-Masken und lagere alles in einen Agenten aus. Bei evtl. Updateschwierigkeiten brauch ich dann nur den Agenten rauskopieren, und ihn zu löschen (hoffentlich).
Gruß
Demian
PS: Und der Agent hat inzwischen so seine Zeilen...wobei ich wohl doch in ne Scriptbibliothek auslager und es mit db.GetDocumentByUNID versuche, die ich im Postopen von _Kalendereintrag speicher und im Postsave der Scriptbibliothek übergebe.
Sub Initialize
'*******************************************************************************************************
'Funktionen:
'Aufgabe anhand der vom User erzeugten Erinnerung erstellen
'Mailbenachrichtigung der Erinnerung hinzufügen
'Beschreibung:
'Wird im Postsave der Maske _Kalendereintrag nach dem Originalcode ausgeführt.
'
'Parameter:
'ParameterDocID = erstellte Erinnerung
'*******************************************************************************************************
'Allgemein
Dim agent As NotesAgent
'*******************************************************************************************************
On Error Goto Fehler
Set s = New NotesSession
Set db = s.CurrentDatabase
Set agent = s.CurrentAgent
Call Logeintrag_Erstellen(db.Title,s.CommonUserName,"Agent: Aufgabe erstellen","Initialize",_
"Suche Erinnerung")
Set Erinnerung = db.GetDocumentByID(agent.ParameterDocID)
If Not (Erinnerung Is Nothing) Then
Call Logeintrag_Erstellen(db.Title,s.CommonUserName,"Agent: Aufgabe erstellen","Initialize",_
"Erinnerung gefunden")
Call MailBenachrichtigung(Erinnerung)
Call AufgabeErstellen(Erinnerung)
Else
Call Logeintrag_Erstellen(db.Title,s.CommonUserName,"Agent: Aufgabe erstellen","Initialize",_
"Erinnerung nicht gefunden")
End If
Fehler:
Call Logeintrag_Erstellen(db.Title,s.CommonUserName,"Agent: Aufgabe erstellen","Initialize",_
Str(Err) & ": " & Error$)
End Sub
Function MailBenachrichtigung(Erinnerung As NotesDocument)
'Diese Funktion setzt die Benachrichtigungsrelevanten Felder
Call Erinnerung.ReplaceItemValue("$Alarmdescription",Erinnerung.Subject(0))
Call Erinnerung.ReplaceItemValue("$AlarmMemoOptions", "2")
Call Erinnerung.ReplaceItemValue("$AlarmSendTo", s.CommonUserName)
Call Erinnerung.ReplaceItemValue("$AlarmUnit", "M")
Call Erinnerung.Save(True,False)
Call Logeintrag_Erstellen(db.Title,s.CommonUserName,"Agent: Aufgabe erstellen","MailBenachrichtigung",_
"Alle Mail-relevanten Felder geändert")
End Function
Function AufgabeErstellen(Erinnerung As NotesDocument)
'Aufgabe erstellen
Set Aufgabe = db.CreateDocument
Aufgabe.Form = "Task"
Aufgabe.StartDate = Now
Aufgabe.Subject = Erinnerung.Subject(0)
Aufgabe.Categories = Erinnerung.Categories(0)
Aufgabe.Chair = s.CommonUserName
Call Aufgabe.ComputeWithForm(False,True)
Call Aufgabe.Save(True,False)
Call Logeintrag_Erstellen(db.Title,s.CommonUserName,"Agent: Aufgabe erstellen","AufgabeErstellen",_
"Aufgabe entspr. Erinnerung erstellt")
End Function
koehlerbv:
--- Zitat von: Demian am 27.11.07 - 20:33:12 ---also habe jetzt folgendes ins Postopen
If Not source.IsNewDoc Then Msgbox source.Document.NoteID
und er wirft mir die Note-ID aus. Allerdings finde ich kein
Call Source.Document.Save (True, False, True)
--- Ende Zitat ---
Zu Punkt 1: Dann war das wohl kein neues Dokument ...
Zu Punkt 2: Diese Zeile sollst Du nicht finden, sondern einfügen. Das AppointmentDoc muss ja eh gespeichert werden, wenn daraufhin dann eine Task erstellt werden soll.
Bernhard
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln