Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Alois am 14.01.05 - 07:33:55

Titel: Vor/Nach Eingang neuer Mail
Beitrag von: Alois am 14.01.05 - 07:33:55
Ich habe in die Suche geschaut und glaube dass mein Agent laufen sollte. Allerdings das Ding will nicht so richtig.

Problem: verschiedene Dokumente können meine DB zugesandt werden und werden je nach "Form" unterschiedlich bearbeitet. Hier den Script:

   Dim session As New NotesSession   
   Dim collection As NotesDocumentCollection
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   
   Print "Hier - Agent agMailFremdeDBEingang"
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set doc = collection.GetFirstDocument()
   
   Print "Hier - Agent agMailFremdeDBEingang - Set"
   
   Dim BasicSetup As NotesDocument
   Const constrBasicSetupProfileForm = |frmBasicSetupProfile|
   Set BasicSetup = db.GetProfileDocument(constrBasicSetupProfileForm)
   
   Print "Hier - Agent agMailFremdeDBEingang - Profile"   
   Print collection.Count
   
   While Not(doc Is Nothing)
      Print "Hier - Agent agMailFremdeDBEingang - DocForm = " + doc.Form(0)   
      Select Case doc.Form(0)
      Case "fremde AADb"
         doc.AktuellerBearbeiter = BasicSetup.KeywordsMailEmpf(0)                     
         doc.Form = "mainfrmF002"
         doc.DocForm = "mainfrmF002"
         Call doc.Save(True,True)
         rc = Benachrichtigung(session, db, doc, BasicSetup, "fremde AADb")
      Case "Memo"         
         rc = Benachrichtigung(session, db, doc, BasicSetup, "Memo")
      Case Default         
      End Select
      
      Set doc = collection.GetNextDocument(doc)
      
   Wend   
   Print "Hier - Agent agMailFremdeDBEingang - Ende"   

Ich bekomme in den Log meine Server alle Meldungen und muss feststellen dass meine Collection keine Dokument beinhaltet:

13.01.2005 16:08:17   Agent printing: Hier - Agent agMailFremdeDBEingang
13.01.2005 16:08:17   Agent printing: Hier - Agent agMailFremdeDBEingang - Set
13.01.2005 16:08:17   Agent printing: Hier - Agent agMailFremdeDBEingang - Profile
13.01.2005 16:08:17   Agent printing:  0
13.01.2005 16:08:17   Agent printing: Hier - Agent agMailFremdeDBEingang - Ende

Es kann meine Meinung nach nur an den folgende Befehl liegen:
Set collection = db.UnprocessedDocuments

Aber was kann ich an der Stelle schreiben????
Titel: Re: Vor/Nach Eingang neuer Mail
Beitrag von: ..Andreas.. am 14.01.05 - 08:59:56
Um das Dokument in Zugriff zu bekommen solltest Du es mal mit

Set doc = session.DocumentContext

versuchen.

Andreas
Titel: Re: Vor/Nach Eingang neuer Mail
Beitrag von: Alois am 14.01.05 - 09:24:26
@Andreas

Oh scheint zu funktionieren  :)

ich habe aber in den Fall nur Zugriff auf ein Dokument... weißt du was passiert wenn ein andere Dokument rein kommt bevor der Agent fertig ist???
Titel: Re: Vor/Nach Eingang neuer Mail
Beitrag von: ..Andreas.. am 14.01.05 - 09:33:08
Der Agent läuft immer los wenn eine Mail eintrifft. Er wird also jedes Mail "für sich" abarbeiten, so dass es kein Problem ist, wenn Du so nur ein Dokument zu fassen bekommst.

Wenn hinter Deinen Aufrufen allerdings komplexe Aktionen stecken, kann es auch schon mal vorkommen das der Agent nicht rechtzeitig fertig wird, und vom Server "gecancelt" wird. Für diesen Fall solltest Du noch einen kleinen (periodischen?) Sicherheitsagenten einbauen.

Andreas
Titel: Re: Vor/Nach Eingang neuer Mail
Beitrag von: Alois am 14.01.05 - 09:53:50
@Andreas Super! Die Firma dankt
Titel: Re: Vor/Nach Eingang neuer Mail
Beitrag von: Semeaphoros am 14.01.05 - 10:40:51
Wichtiger Hinweis: Offenbar - auch wenn das nicht ausdrücklich gesagt wurde - ist das ein Agent "Vor" Auslieferung.

Man beachte, dass die Agenten "Nach Auslieferung" das anders handhaben.

Grundsätzlich wäre zu empfehlen, diese Funktionalität umzuwandeln in einen Agenten "Nach" Mailempfang, die Agenten "Vor" sollten wenn immer möglich vermieden werden: sie werden vom Mail-Router verarbeitet und nicht vom Agent-Manager, und der Mailrouter hat eigentlich wichtigere Aufgaben zu tun.
Titel: Re: Vor/Nach Eingang neuer Mail
Beitrag von: Alois am 14.01.05 - 14:19:03
@Semeaphoros
heißt es dass für ein Agente "Nach Eingang" würde den Befehl Set doc = session.DocumentContext nicht funktionieren? könntest du mir dann sagen mit welchem Befehl ich an die Dokuemnte drann kommen kann?

Sonst ist mir klar dass der Mailrouter was besseres zu tun hat (ehrlich gesagt ich hatte mich noch nicht gekümmert wer was macht). Ich kann nur sehen dass der MailRouter nicht viel CPU braucht (während der normalle Betrieb). Sind da andere Aufgaben was er zu überweltigen hat die ab und zu mehr brauchen?
Titel: Re: Vor/Nach Eingang neuer Mail
Beitrag von: Semeaphoros am 14.01.05 - 16:18:03
Da musst Du dann die UnprocessedDocuments verwenden. Hauptproblem mit den Before-Agenten: solange so ein Agent läuft, werden keine weiteren Mails mehr geroutet, sprich bei einem stak benutzten Mailserver kann durch solche Agenten durchaus der Mailverkehr behindert werden.