Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: dia am 14.01.04 - 09:35:03

Titel: aktuelles Dokument des Agenten bekommen
Beitrag von: dia am 14.01.04 - 09:35:03
Also ich habe einen Agenten, der nach Eingang neuer Mail startet. Nun will ich in diesem Agenten aus der Mail die den Agenten zum starten gebracht hat etwas auslesen. Wie komme ich nun aber am einfachsten an dieses Dokument. Ich könnte mir von allen Dokumenten das neueste raussuchen. Aber gibt es da nicht eine elegantere Möglichkeit?

Danke
Titel: Re:aktuelles Dokument des Agenten bekommen
Beitrag von: Glombi am 14.01.04 - 09:47:16
Das geht mit Script:

dim session as New NotesSession
dim db as NotesDatabase
dim dc as NotesDocumentCollection
set db = session.CurrentDatabase
set dc = db.UnprocessedDocuments

Dann stehen in dc alle NotesDocumente drin. Du kannst dann mit einer Schleife über die Docs iterieren.

Andreas
Titel: DocumentCollection?
Beitrag von: dia am 14.01.04 - 10:08:13
Kann ich denn davon ausgehen, dass in der DocumentCollection dann nur das eine Dokument drin ist, dass den Agenten ausgelöst hat? Dieses Dokument würde dann abgearbeitet werden. Und wenn dann eine weitere Mail eingeht startet der Agent ja erneut und erstellt wieder eine Collection in der wiederum nur das eine Dokument enthalten ist, das den Agenten praktisch gestartet hat. Oder ist es auch irgendwie möglich, dass mehrer Dokumente in die Collection geraten?
Titel: Re:aktuelles Dokument des Agenten bekommen
Beitrag von: Semeaphoros am 14.01.04 - 10:12:43
Da diese Agenten von Domino bewusst mit Abstand gestartet werden (lässt sich in der ini einstellen), und da ja mails innerhalb von Bruchteilen von Sekunden ankommen können, ist es durchaus möglich, dass da ein ganzes Büschel von neuen Mails ankommt. Das sollte aber nicht wirklich ein Problem sein, Du kannst ja die Collection durchlaufen.

Noch was, wenn man so einen Agenten deaktiviert und wieder neu aktiviert oder irgend eine Aenderung daran vornimmt, kommt es vor, dass bereits abgearbeitete Mails noch einmal als geliefert werden. Es muss also zusätzlich noch ein Mechanismus eingebaut werden, der verhindert, das Mails mehr als einmal verarbeitet werden.
Titel: Re:DocumentCollection?
Beitrag von: Glombi am 14.01.04 - 10:14:25
Kann ich denn davon ausgehen, dass in der DocumentCollection dann nur das eine Dokument drin ist, dass den Agenten ausgelöst hat? Dieses Dokument würde dann abgearbeitet werden. Und wenn dann eine weitere Mail eingeht startet der Agent ja erneut und erstellt wieder eine Collection in der wiederum nur das eine Dokument enthalten ist, das den Agenten praktisch gestartet hat.
Das ist korrekt, also geht es so:
dim session as New NotesSession
dim db as NotesDatabase
dim dc as NotesDocumentCollection
dim doc as NotesDocument
set db = session.CurrentDatabase
set dc = db.UnprocessedDocuments
set doc = dc.GetFirstDocument

Ich hatte das mit Paste-In verwechselt, da kann man ja auch mehrere einfügen. Um sicher zu gehen und Code nicht mehrfach zu entwickeln, arbeite ich aber immer nur mit Collections und einer Schleife.

Andreas
Titel: Re:aktuelles Dokument des Agenten bekommen
Beitrag von: koehlerbv am 14.01.04 - 10:16:01
Um die abgearbeiteten Dokumente von einer erneuten Bearbeitung durch diesen Agent zu schützen, verwendet man am besten die Notes-Bordmittel:
Call notesDocumentCollection.UpdateAll

HTH,
Bernhard
Titel: Re:aktuelles Dokument des Agenten bekommen
Beitrag von: Glombi am 14.01.04 - 10:16:57
@Jens:
"Noch was, wenn man so einen Agenten deaktiviert und wieder neu aktiviert oder irgend eine Aenderung daran vornimmt, kommt es vor, dass bereits abgearbeitete Mails noch einmal als geliefert werden. Es muss also zusätzlich noch ein Mechanismus eingebaut werden, der verhindert, das Mails mehr als einmal verarbeitet werden."

Bist Du sicher, dass das auch für Mail-In Agenten so ist? Ich bin davon ausgegangen, dass das den Trigger "Alle noch nicht bearbeiten Dokumente" gilt. Dann muss man in der Tat immer noch
Call notesSession.UpdateProcessedDoc( notesDocument )
aufrufen.

Andreas
Titel: Re:aktuelles Dokument des Agenten bekommen
Beitrag von: Semeaphoros am 14.01.04 - 10:20:02
Leider ist das so. Schlechte Erfahrungen haben mich das gelehrt. Gemäss Julie Kasadevich ("Misses Agent") sind die AfterNewMail nichts anderes als spezialisierte "Modified" Agenten. Ich kann Dir aber nicht mehr genau sagen, in welchen Situationen genau die Mails ein weiteres Mal kommen. Ich hab jedenfalls schon Berge von Notifikationen bekommen, wenn ich in einer Mail-In-DB den entsprechenden Warn-Agenten neu aufgeheheitzt hatte.
Titel: Re:aktuelles Dokument des Agenten bekommen
Beitrag von: Glombi am 14.01.04 - 10:27:04
Gut zu wissen, danke für die Info!

Ein Fall für die Best Practices? Ich denke mal.

Andreas
Titel: Re:aktuelles Dokument des Agenten bekommen
Beitrag von: Semeaphoros am 14.01.04 - 10:28:46
Denke ich auch, in dem Bereich gibt es noch vieles, das man in die Best Practices reinsetzen könnte.
Titel: Re:aktuelles Dokument des Agenten bekommen
Beitrag von: Glombi am 14.01.04 - 10:29:08
Noch was: Wenn ich einen Agenten deaktiviere und dann wieder aktiviere, ist es ja so, als ob ich den neu gemacht hätte. Also sind von dem Agenten noch keine Dokumente bearbeitet worden.
Deckt sich das mit Deinen Erfahrungen?
Titel: Re:aktuelles Dokument des Agenten bekommen
Beitrag von: Semeaphoros am 14.01.04 - 11:10:40
Ja, ist glaube ich auch irgendwo dokumentiert (oder dann hat es Julie irgendwo in einem Forum fallen lassen, ist also "as designed"). Für Modified macht das irgendwo auch Sinn, denn schliesslich verändert sich ja möglicherweise die Logik, wenn man einen James Bond bearbeitet.