Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: archedude am 21.03.07 - 12:46:07

Titel: Ungewollter Abbruch eines Agenten beim Mailversenden
Beitrag von: archedude am 21.03.07 - 12:46:07
Hallo zusammen,

vielleicht kann mir hier jemand bei meinem Problem weiterhelfen.

Ich habe folgendes Problem beim automatisierten Verschicken von Emails in einem LotusNotes Script Agenten in der Maildatenbank.

Über eine ODBC Verbindung wird aus einer Oracle Datenbank eine Liste von Emailadressen und weiteren Daten ausgelesen. An jede eingetragene Emailadresse in dieser Datenbank muss eine individuelle Email verschickt werden. Ich lese also alle Daten aus und gehe in einer For / Next Schleife über das Resultset und verschicke die Mail mit Call doc.Send(False,mailadr).

Jetzt kann es vorkommen, das eine Emailadresse in der Oracle Datenbank nicht mehr gültig ist. Wenn ich den LoNo Client auf Insel stelle wird die Mail ja erzeugt aber ersteinmal in den Ausgehenden Mails gespeichert. Beim Verschicken erhalte ich dann folgenden Zustellungsfehler:
User XY (XY) not listed in public Name & Address Book

Wenn der Agent jetzt aber die Mail gleich verschicken möchte stürzt die Verarbeitung ab.

Meine Frage ist, wie kann ich den folgenden Codeschnippsel um eine Fehlerabfangroutine erweitern, dass auch bei falschen Emailadressen mit dem nächsten Eintrag weitergemacht wird?  :-:

Code
Set db = s.CurrentDatabase
Set doc = New NotesDocument(db)
doc.Form = "Memo"
doc.Subject = "Daten"

For i = 1 To result.NumRows
    result.CurrentRow = i
    wert = result.GetValue(1)
    mailadr = result.GetValue(2)
    doc.Body = "Text " & wert
    Call doc.Save(True,True)
    Call doc.Send(False,mailadr)
Next
Titel: Re: Ungewollter Abbruch eines Agenten beim Mailversenden
Beitrag von: eknori am 21.03.07 - 12:48:45
Plump gesagt, gar nicht. Für den Agenten sind ja alle MailAdressen gültig, die er als Futter verarbeitet.
Es besteht ja keine Interaktion zwischen Agent und NDR.

Titel: Re: Ungewollter Abbruch eines Agenten beim Mailversenden
Beitrag von: archedude am 21.03.07 - 12:51:07
Hmm, hab ich bislang auch gedacht - nur wie kann es sein das dann die komplette Verarbeitung abbricht wenn eine Email nicht im public Name & Address Book steht?
Titel: Re: Ungewollter Abbruch eines Agenten beim Mailversenden
Beitrag von: eknori am 21.03.07 - 12:51:39
Zitat
wenn eine Email nicht im public Name & Address Book steht?
Da sehe ich erst recht keinen Zusammenhang...
Titel: Re: Ungewollter Abbruch eines Agenten beim Mailversenden
Beitrag von: archedude am 22.03.07 - 13:50:53
Ich finde das Problem sehr merkwürdig. Eventuell liegt dies ja auch am Setup  ???

Ich habe das Problem jetzt so umgangen das ich den Ausdruck On Error Resume Next in das Script eingefügt hab, dann stürzt jedenfalls nicht die gesamte Verarbeitung ab.
Titel: Re: Ungewollter Abbruch eines Agenten beim Mailversenden
Beitrag von: klaussal am 22.03.07 - 14:49:24
Das gleiche Problem hatte ich auch. Habe dann auch ein "resume next" eingebaut. Seit dem läuft es.

Du bist also nicht alleine mit diesem Problem  ;)
Titel: Re: Ungewollter Abbruch eines Agenten beim Mailversenden
Beitrag von: koehlerbv am 23.10.07 - 17:26:24
Ich bin gerade per Zufall über den doch schon betagteren Thread gestossen und mag ihn nochmal aufwärmen, da mir hier einiges nicht ausreichend erklärt scheint:

Zunäcgst einmal stürzt der Agent nicht ab, sondern er läuft in einen (verzeichneten!) Fehler und beendet sich korrekterweise. Und es bei weitem nicht so, dass man da gar nichts machen könnte, sondern man kann (und sollte) diesen erzeugten Fehlercode sauber auswerten:
Die Empfängeradresse ist inkorrekt: Es wird der Fehlercode 4294 (lsERR_NOTES_NO_MATCH) erzeugt.
Die Empfängeradresse ist nicht eindeutig: Es wird der Fehlercode 4295 (lsERR_NOTES_AMBIGUOUS_MATCH) erzeugt.

Diese kann man nun im ErrorHandler (aus meiner Sicht ein "must-have", ohne den man keine Zeile in einem Modul schreiben sollte!) auswerten und vor allem protokollieren - sonst kriegt ja niemand mit, dass da was schief läuft. Und protokollieren heisst nicht, ein einfaches Print-Statement abzusondern, dass in den unendlichen Weiten des Server-Logs untergeht. ErrorHandling und Logging wurde hier schon hinreichend diskutiert, das mag ich jetzt nicht erneut aufwärmen.

Gerade wegen der Frage der Beachtung des aufgetretenen Fehlers halte ich - wie wirklich fast immer - ein Resume Next für sehr kontraproduktiv: Das macht man nicht ohne wirklich zwingende Not!
Nach sauberer Fehlerbehandlung (es könnte ja auch ein Fehler <> 4294 / 4295 aufgetreten sein!) ist ein Resume Next natürlich durchaus denkbar.

Ich hoffe, das hilft jemanden, wenn er durch die Suchfunktion oder Blättern auf diesen Thread stossen sollte.

Bernhard