Autor Thema: Agent läuft "außerplanmäßig"  (Gelesen 2926 mal)

Offline Steffen B.

  • Junior Mitglied
  • **
  • Beiträge: 96
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Agent läuft "außerplanmäßig"
« am: 18.02.11 - 07:35:40 »
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

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
Menschen die mich einst verließen oder die mich damals hassten
Es mir schwerer machten, sich mit meinem Leben nie befassten
Auch wenn sie es mir nicht glauben wollen ich bedanke mich
denn nur durch ihren Hass und neid bin ich jetzt unsterblich

Offline Banni

  • Senior Mitglied
  • ****
  • Beiträge: 463
  • Geschlecht: Männlich
Re: Agent läuft "außerplanmäßig"
« Antwort #1 am: 18.02.11 - 08:23:33 »
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
Jan Bauer
Notes /Domino 6.5, 8

Geht nicht, gibt's nicht. Geht höchstens schwer...

Offline oxyd21

  • Senior Mitglied
  • ****
  • Beiträge: 371
  • Geschlecht: Männlich
Re: Agent läuft "außerplanmäßig"
« Antwort #2 am: 18.02.11 - 08:52:48 »
view.getNextDocument ist nicht sehr schön, da ein View dynamisch ist.

Du solltest m.E. eine ViewEntryCollection verwenden.

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline gstueb

  • Aktives Mitglied
  • ***
  • Beiträge: 125
  • Geschlecht: Männlich
  • God is real unless declared integer
Re: Agent läuft "außerplanmäßig"
« Antwort #4 am: 08.03.16 - 12:55:25 »
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz