... der Agent lässt sich nicht so ohne weiteres portieren, denn wenn du dir den Code dort anschaust, wirst du sehen, daß er sich Profildokumente zieht, die es im persönlichen Adressbuch und in deiner Mail-DB gibt, bei dir in deiner selbstgestrickten Datenbank aber nicht - daher meine Frage, ob es sich bei deiner Anwendung um ein privates Adressbuch handelt oder eine selbstgestrickte Anwendung. Ich hatte es vermutet, da du von einem Feld "EMail" gesprochen hast - das gibt es so im Adressbuch nicht...
Wie Bernhard schon gezeigt hat, mit Call dbMail.OpenMail kannst du aus einer initialisierten NotesDatanbank deine Mail-DB öffnen. Maßgeblich ist dein Arbeitsumgebungsdokument. Damit bekommst du das Profildokument "CalendarProfile" zu fassen - jetzt mußt dich um das Profildokument der Adress-Datenbank kümmern, daß dir in deiner Anwendung gar nicht so zur Verfügung steht...
Das ist nach meiner persönlichen Meinung mehr Aufwand den Agenten und dessen Library anzupassen, als den Code direkt zu programmieren...
Du warst doch schon auf einem guten Weg. Mit UnprocessedDocuments erhälst du die markierten Dokumente, aus denen du das Feld "EMail" in eine Array übernimmst und es dann in einem neuen Dokument deiner MAilDB ins Feld "SendTo" schreibst...
So auf die schnelle...
' # Initialisierungen
Dim session As New NotesSession
Dim dbThis As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim vSendTo As Variant
Dim ws As New NotesUIWorkspace
Dim dbMail As New NotesDatabase( "" , "" )
Dim docMail As NotesDocument
Dim sDummy( 0 ) As String
Set dbThis = session.CurrentDatabase
'
Call dbMail.OpenMail
If Not dbMail.IsOpen Then
' # Abbruchbedingung, da die Mail-DB nicht geöffnet werden konnte...
' # ggf. Medlung im Frontend, warum abgebrochen wird...
Exit Sub ' oder Exit Function - je nachdem...
End If
Set dc = dbThis.UnprocessedDocument
If dc.Count = 0 Then
' # Abbruchbedingung, da keine Dokument markiert waren...
' # ggf. Medlung im Frontend, warum abgebrochen wird...
Exit Sub ' oder Exit Function - je nachdem...
End If
vSendTo = sDummy
Set doc = dc.GetFirstDocument
While not doc Is Nothing
' # zusammentragen des Feldes "EMail" in eine Array-Variable
vSendTo = ArrayAppend( vSendTo , doc.EMail )
Set doc = dc.GetNextDocument
Wend
' # Bereinigen des Arrays um leere und doppelte Werte, eventuell in sortierter Reihenfolge
vSendTo = ArraySort( ArrayUnique( FullTrim( vSendTo ) ) )
Set docMail = dbMail.CreateDocument
docMail.Form = "Memo"
docMail.SendTo = vSendTo
' # ... und all die Parameter, die du diesem Dokument geben willst
'...
Call ws.EditDocument( True , docMail ) ' # öffnen der neuen Mail im Frontend...
... und nach all den manuellen Inhalten dann noch den Senden-Button drücken...
- Zu deinem Code sei noch bemerkt, daß man GetNthDocument() nur dann nimmt, wenn man weiß, daß man genau das 20.000ste Dokument benötigt, ohne die anderen vorher anzuschauen. Je mehr Dokumente du in deiner Collection hälst, um so schlechter die Performance. Bei ein paar Dokumenten fällt das hier nicht besonders ins Gewicht - aber leicht wird daraus eine schlechte Angewohnheit...
- Zur Überprüfung der Collection genügt die Abfrage nach dc.Count = 0, da UnprocessedDocument eine Collection mit Count = 0 zurückgibt, falls keine Dokumente markiert waren...
- beim sammeln der E-Mail-Adressen verwendest du in deiner Schreibweise Arrays, denn du greifst nicht auf den ersten Wert von "EMail" zu, sondern auf das gesamte Feld - das geht so auf jeden Fall schief => type mismatch könnte eine Fehlermeldung an der Stelle sein, da dein Feld vom Typ "Textliste" ist, auch wenn nur ein Wert drin steht. Du erhälst ein mehrdimensionales Array mit Empfängeradressen. Bei meiner Methode spilt es keine Rolle, ob in dem Feld ein oder auch mehrere Adressen enthalten sind. Sollte es eine Rolle spielen, dann musst du eben docMail.EMail(0) verwenden...
- zudem hilft "Option Explicit" um alle Variablen vor deren Benutzung zu deklarieren - das scheint hier zu fehlen
- profile.Owner(0) ist ein Überbleibsel aus dem Agentencode. Gemeint war damit das Profildokument deiner Mail-Datenbank namens "CalendarProfile". Dort steht im Feld "Owner" dein Mailname drin, der hier als Principal verwendet wird. Das Profildokument ist weder deklariert, noch wird es irgendwo initialisiert - zumindest nicht in deinem Codeschnipsel...
Ansonsten könnte das im Rätselraten eine Rolle gespielt haben...
Toni