Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Raimund am 09.01.03 - 11:34:15

Titel: Agent
Beitrag von: Raimund am 09.01.03 - 11:34:15
Hi Entwickler,

habe male wieder ein kleines Problem.

In der Ressourcen-DB soll eine Mail an eine Person gesendet werden, wenn Dokumente erstellt oder geändert wurden.

"Feld ResourceTyp enthält 1"

Habe folgendes gemacht, funktioniert aber nicht. Bekomme immer alle Mails für alle Docs, welche die ResourceType 1 haben.


Sub Initialize
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim memo As NotesDocument
   Dim Item As Variant
   Dim rtitem As NotesRichTextItem
   Dim session As New NotesSession
   EMail =  "raimund@sorange.com"
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set doc = collection.GetFirstDocument()
   Set memo = New NotesDocument( db )
   
   While Not(doc Is Nothing)
      If doc.ResourceType(0) = "1" And doc.AlreadySent (0)= "" Then  
'Set Item = doc.GetFirstItem( "ResourceName" )
         Set memo = New NotesDocument( db )
         
         memo.Form = "Memo"
         memo.Subject = "Ressourcenänderung "
         Set rtitem = New NotesRichTextItem( memo, "Body" )
         Call rtitem.AddNewLine( 1 )
         Call rtitem.AppendText( "Neue Reservierung oder Änderung ." )
         Call rtitem.AddNewLine( 1 )
         Call rtitem.AppendDocLink( doc, db.Title )
         
         Call rtitem.AddNewLine( 1 )
         'Call rtitem.AppendRTItem( Item )
         Call memo.Send( False, EMail )
         Call session.UpdateProcessedDoc( doc )
         Call doc.send(0)
         doc.AlreadySent = "YES"
         Call doc.save (True,True)
         
      End If
      Set doc = collection.GetNextDocument(doc)
   Wend
End Sub

Vielleicht habt Ihr eine Idee, wo der Fehler liegt?

Vielen Dank

Gruß
Raimund
Titel: Re:Agent
Beitrag von: klaussal am 09.01.03 - 13:34:20
@ raimund,

auf den ersten blick kann ich keinen fehler sehen. schon mal mit debugger geprüft ?

ich mache solche sachen am liebsten über eine ansicht, weil :
- kann mir bei bedarf die docs anzeigen lassen, die verarbeitet würden (man muss dann allerdings im script einen "view.refresh" einbauen).
Titel: Re:Agent
Beitrag von: gulp am 09.01.03 - 13:46:45
Hallo Raimund,

möglicherweise musst du die Dokumente, die der Agent bearbeitet hat, markieren, damit sie nicht noch einmal bearbeitet werden(bei periodischen Agents, die auf geänderte Dokumente laufen funktioniert es dann)

das macht man so:
Call collection.UpdateAll()
am Ende deines Agent.

Hoffentlich hilft dir das weiter
lg
gulp
Titel: Re:Agent
Beitrag von: Till_21 am 09.01.03 - 13:48:53
versuch es mal mit klammern :

      If ((doc.ResourceType(0) = "1") And (doc.AlreadySent (0)= "")) Then  

gruss
Titel: Re:Agent
Beitrag von: Raimund am 10.01.03 - 09:06:20
Hi Entwickler,

vielen dank für die Antworten.

Habe alles getestet. Es gibt keine Fehler. Problem.
Es werden über 900 Docs gefunden, (Agent) welche die Kriterien erfüllen.
Vielleicht geht es mit den Optionen: Feld ResourceType enthält 1ANDBenutzt Maske 'Ressource, ...'??

Muss ich wohl testen :-) (Agent2)

Gruß
Raimund
Titel: Re:Agent
Beitrag von: Meff am 10.01.03 - 16:35:03
Hi Raimund,

das Fehld "AlreadySent" gibt es Standardmässig nicht, Deine Abfrage basiert aber darauf. Warum machst Du nicht einen eigenen View, welches als Selection auf dieses Feld basiert, d.h. es werden alle Dokumente angezeigt, welche nicht das entsprechende Feld bzw. den Wert "YES" haben. Anschliessend machst Du eine ViewEntryCollection über den entsprechenden View. Somit hast Du weniger Dokumente zu bearbeiten.

Meff ;)