Domino 9 und frühere Versionen > Entwicklung
aus mehreren Adressaten jeweils ein dokument mache
bordi:
Ich möchte aus Dokumente in einer Datenbank, die mehrere Adressaten (SendTo) besitzen, einzelne Dokumente mit jeweils einem Adressaten machen.
Dieser Agent soll "vor eingang neuer mail" laufen.
leider funktioniert er nicht wie gewünscht, da am ende in jedem dokument, der selbe Adressat drinsteht.
was mache ich falsch???
danke für die hilfe
'****** Sinn des Agenten ist es die Lesefelder zu füllen, damit die Abteilungen nur ihre eigenen Dokumente lesen können
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim item As NotesItem
Set db = session.CurrentDatabase
Set dc = db.allDocuments
Set doc = dc.GetFirstDocument
Dim gruppe As String
Dim i As Integer
Dim flagitem As NotesItem
Dim max As Integer
Dim sendtosave() As String
While Not(doc Is Nothing)
If Not (doc.HasItem( "processed" ) ) Then '*** Dokument schon durch Agent bearbeitet worden?
Set flagitem = New NotesItem( doc, "processed", 1 ) 'flag = 1 '*** Dokumentstatus wird als bearbeitet gesetzt
max = Ubound(doc.SendTo)
Redim sendtosave(0 To max) As String
'SendTo-Feld zwischenspeichern
For i = 0 To max
sendtosave(i) = doc.SendTo(i)
Next
For i = 0 To Ubound(sendtosave)
'Nur gültige Adressaten zulassen
If Not Strright (sendtosave(i), "#") = "" Then
'Richtigen Adressaten setzen
Set item = doc.ReplaceItemValue( "SendTo", sendtosave(i) )
'Dokument wird gespeichert
Call doc.Save(True, True)
Call session.UpdateProcessedDoc( doc )
End If
Next
End If
'Nächstes unbearbeitetes Dokument
Set doc = dc.GetNextDocument(doc)
Wend
End Sub
Rob Green:
1. Frage: wo werden die neuen Docs erstellt in Deinem Codesnippet?
2. Frage: wenn Du das Teil im Client laufen läßt und den Debugger anhast, läuft alles reibungslos durch?
Glombi:
Hi bordi,
Du erstellt ja gar keine neuen Dokumente, sondern iterierst im Dok. über alle Einträge im Feld SendTo und trägst dann den letzten ein.
Ausserdem wird kein Lesefeld gesetzt.
Wenn ich das richtig verstanden habe, will Du pro Eintrag im Feld SendTo eine Kopie des Dokuments erstellen (sofern ein "#" vorkommt).
Das könntest Du dann so machen:
dim newdoc as NotesDocument
For i = 0 To Ubound(sendtosave)
'Nur gültige Adressaten zulassen
If Not Strright (sendtosave(i), "#") = "" Then
'Richtigen Adressaten setzn
set newdoc = doc.CopyToDatabase( db )
newdoc.processed = 1
Set item = newdoc.ReplaceItemValue( "SendTo", sendtosave(i) )
'Lesenamensfeld setzen
item.IsReaders = true
'Dokument wird gespeichert
Call newdoc.Save(True, True)
Call session.UpdateProcessedDoc( doc )
End If
Next
bordi:
1. hier:
For i = 0 To Ubound(sendtosave)
'Nur gültige Adressaten zulassen
If Not Strright (sendtosave(i), "#") = "" Then
'Richtigen Adressaten setzen
Set item = doc.ReplaceItemValue( "SendTo", sendtosave(i) )
'Dokument wird gespeichert
Call doc.Save(True, True)
Call session.UpdateProcessedDoc( doc )
End If
Next
2. im debugger zeigt er das bearbeitete sendto feld richtig gefüllt an.
zum beispiel bei einem dokument, das reinkommt mit drei adressaten, soll er drei dokumente mit jeweils einem der drei adressaten machen. wie gesagt im debugger stimmts, aber nachher habe ich drei mails mit einem identischen adressaten im sendto feld.
tja, keine ahnung was für einen mist ich mache, oder ob es am server liegt?
???
bordi:
danke glombi !!!
das probiere ich morgen mal aus.
ich hatte auch schon die idee mit "copytodatabase"
aber auf einmal hatte ich jede mail mehrfach.
mit "processed = 1" und "newdoc" anstatt "doc"
sollte es aber klappen
cu bordi
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln