Domino 9 und frühere Versionen > ND8: Entwicklung

Agent läuft "außerplanmäßig"

(1/1)

Steffen B.:
Hallo Leute,

erst mal sorry für den blöden Betreff, mir ist aber einfach nichts besseres eingefallen. Auch wusste ich nicht genau, wo nach ich suchen sollte, weshalb ich entsprechend auch nichts gefunden habe.

Wir haben einen Agenten, der eine eingehende eMail bearbeitet und dann weiterleitet. Der Code sieht folgendermaßen aus:

--- Code: ---Option Public
Sub Initialize
Dim session As New NotesSession
Dim db_cur As NotesDatabase
Dim view As NotesView
Dim fwmail As NotesDocument
Dim doc As NotesDocument
Dim doc2 As NotesDocument
Dim itemTemp As notesitem
Dim sViewName As String
'------------------------------------------------
'Konstanten
Const mailEmpf = "test@acme.com"
Const zielOrdner = "Versendet" 'In diesen Ordner werden die Mails nach dem Versenden verschoben
'------------------------------------------------

Print "wird gestartet"
'Aktuelle Datenbank holen
Set db_cur = session.currentdatabase
    ' In dieser Ansicht sind die Dokumente abgelegt
    ' Das kann auch ein Ordner sein
sViewName = "($Inbox)"

    'Ansicht öffnen
Set view = db_cur.getView(sViewName)
Call view.refresh
'Ansicht aktualisieren


     ' erstes Dokument auswählen
Set doc = view.getFirstDocument

' Solange wie in der Ansicht Dokumente zu finden sind, wird die Schleife durchlaufen
While Not(doc Is Nothing)
'nächtes Dokument auswählen, damit am Ende der Schleife das aktuelle gelöscht  bzw. verschoben werden kann
Set  doc2 =   view.getNextDocument(doc)

'Mail-Doc erstellen
set fwmail = New NotesDocument (db_cur)
'Felder aus der Mail kopieren
Set itemTemp = doc.Getfirstitem("Subject")
Call fwmail.Copyitem(itemTemp, "")
Set itemTemp = doc.Getfirstitem("Body")
Call fwmail.Copyitem(itemTemp, "")
'Empfänger einfügen
Call fwmail.replaceItemvalue("sendto", mailEmpf)
'Systemfeld setzen (damit die gesendete Mail nicht gespeichert wird)
Call fwmail.replaceItemvalue("$SaveOptions", "0")

'Dokument versendet
Call fwmail.send(False)

' Dokument in den ZielOrdner verschieben
Call doc.RemoveFromFolder("($Inbox)")
Call doc.PutInFolder(zielOrdner, True)
'Nächstes Dokument
Set doc = doc2

Wend

Print "wird beendet"
End Sub
--- Ende Code ---

Das funktioniert an sich auch alles prima, das große Problem ist jedoch, dass die letzte eMail, die in dem Postfach eingegangen ist, um ca. 0 Uhr nochmals gesendet wird.

Hat jemand eine Idee, woran das liegen könnte bzw. wie wir das abstellen können?

Ich bin für jeden Hinweis dankbar!

Viele Grüße
  Steffen

Banni:
Hallo Steffen,

auch auf die Gefahr hin, jetzt irgendwelchen Unsinn von mir zu geben, aber ich versteh das Konstrukt mit doc2 noch nicht ganz. Ich glaube an der letzten Stelle

      'Nächstes Dokument
      Set doc = doc2

läufst Du auf das Problem, da doc2 hier bei der Verarbeitung der letzten Mail schon Nothing ist.

Ich würde doc2 gleich am Anfang der Schleife den Wert von doc zuweisen:

      'nächtes Dokument auswählen, damit am Ende der Schleife das aktuelle gelöscht  bzw. verschoben werden kann
      Set  doc2 =   doc

Damit wäre sichergestellt, dass doc2 nicht NOTHING ist.

Am Ende der Schleife würde ich die Verschiebeaktion mit doc2 machen, vorher noch für doc das nächste in der view auswählen:

      'Nächstes Dokument
               set doc = view.Getnextdocument(doc)

      ' Dokument in den ZielOrdner verschieben
      Call doc2.RemoveFromFolder("($Inbox)")
      Call doc2.PutInFolder(zielOrdner, True)


Ich habs nicht getestet, da gerade keine Möglichkeit.

Gruß Jan

oxyd21:
view.getNextDocument ist nicht sehr schön, da ein View dynamisch ist.

Du solltest m.E. eine ViewEntryCollection verwenden.

m3:
http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/autoupdate-false?opendocument

gstueb:
Ich hatte heute ein ähnliches Problem ... wenn ich Dokumente in einen Ordner verschiebe funktioniert der "Durchgang" über view.GetNextDocument(doc) nicht richtig.

Ich habe das jetzt ganz anders gelöst. Ich merke mir die Universal-Ids der zu bearbeitenden Dokumente und gehe diese anschließend separat durch:


--- Code: ---Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim docList List As string
Set db = session.Currentdatabase
Set view = db.Getview("$Inbox")
Set doc = view.Getfirstdocument()
While Not (doc Is Nothing)
If doc.Erledigt(0) = "1" Then
docList(doc.Universalid) = "1"
End if
Set doc = view.Getnextdocument(doc)
Wend
ForAll id In docList
Set doc = db.Getdocumentbyunid(ListTag(id))
doc.PutInFolder "Erledigt"
doc.RemoveFromFolder "$Inbox"
End ForAll
End Sub
--- Ende Code ---

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln