Domino 9 und frühere Versionen > ND8: Entwicklung
LS Common Names von mehreren Einträgen
Bruce Willis:
Hallo,
ein Agent läuft periodisch über bestimmte Dokumente und sendet eine Email an die Empfänger, die dort in dem Feld NW stehen.
--- Code: ---Dim AnWen As Variant
AnWen = doc.NW
Message.SendTo=AnWen
--- Ende Code ---
Die 2. Email sendet der Agent, um jemanden über die Empfänger der 1. Email zu informieren:
--- Code: ---Call rtitem.AppendText("Die Nachricht wurde an die folgenden Empfänger verschickt: " + Implode (AnWen, ", ") & Chr(13) )
--- Ende Code ---
Sieht etwa so und leider nicht ganz schön aus:
CN=mein user02/O=Welt, CN=my user03/O=Welt
Ich würde gerne Common Name benutzen.
Bei der folgenden Variante wird nur der erste Name genommen aber nicht alle, die im Feld NW eingetragen sind:
--- Code: ---
Dim nam As NotesName
Dim AnWenString As String
AnWenString = Implode(AnWen, ", ")
Set nam = session.CreateName(AnWenString)
Call rtitem.AppendText("Die Nachricht wurde an die folgenden Empfänger verschickt: " + nam.Common & Chr(13) )
--- Ende Code ---
Was muss ich hier ändern?
Gruß
Leo
Peter Klett:
Du musst die Empfänger erst in ein Array übernehmen, dann jeden Arrayeintrag (Stichwort Forall) in Common übersetzen und erst dann in einen String implodieren.
koehlerbv:
Oder Du machst ein Evaluate über Dein Empfänger-Array mit @Username ([CN]; ...).
Bernhard
Bruce Willis:
VIELEN DANK
für die schnelle Unterstützung!
Scheint zu funktionieren:
--- Code: --- ForAll value In AnWen
Dim nam As NotesName
Set nam = session.CreateName(value)
Dim AnWenCN As String
AnWenCN = nam.Common + ", " + AnWenCN
End ForAll
'Print AnWenCN 'zum Testen
--- Ende Code ---
Gruß
Leo
koehlerbv:
Lieber Brucie, das sinnfreie Deklarieren der Variablen / Objekte nam und AnWenCN ist kontraproduktiv, weil es eben immer wieder innerhalb der Schleife passiert.
Besser wäre es so:
--- Code: --- Dim nam As NotesName
Dim AnWenCN As String
ForAll value In AnWen
Set nam = session.CreateName(value)
AnWenCN = nam.Common + ", " + AnWenCN
End ForAll
'Print AnWenCN 'zum Testen
--- Ende Code ---
Knackiger ist aber:
--- Code: ---Dim docCurrent As NotesDocument
dim vNamesCommon As Variant
Set docCurrent = ....
vNamesCommon = Evaluate ("@Name ([CN]; NW)", docCurrent)
Messagebox Implode (vNamesCommon, Chr$ (10)) 'zum testen
--- Ende Code ---
Massgabe: NW ist wie von Dir beschrieben Dein Item, in dem die bisherigen Empfänger im Dokument (docCurrent) gelistet sind.
HTH,
Bernhard
PS: Zweifelsohne ist die Forall-Schleife in LotusScript wie prinzipiell von Peter und Dir aufgemalt die lesbarere Variante, zu der ich auch eher neige. Das nativere Evaluate sollte eingesetzt werden, wenn es tatsächlich auf Performance ankommt.
PPS: Was heisst eigentlich "scheint zu funktionieren"?? In der Programmierung gibt es nur zwei Zustände für solch simple Aufgaben: Tut oder tut eben nicht. Natürlich hast Du keine Fehler- oder Ausnahmebedingungen-Behandlung eingebaut. Wenn Du gar kein Item zum Füllen von AnWen hast oder AnWen nur einen Leerstring enthält, dann fällst Du natürlich auf die Nase oder erhältst Nonsens. Aber das gehörte natürlich nicht zu Deiner Frage ;)
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln