Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: (h)uMan am 15.12.09 - 09:24:53
-
Hallo,
ich benötige einen Agenten, der als "manuelle Aktion" in allen Personendokumenten im Domino Directory ein bestimmte Feld auf einen bestimmten Wert überprüft und bei Treffer die Mailadresse aus dem Personendokument in eine festgelegte Gruppe (Mailverteiler) schreibt. Der vorhandene Mailverteiler kann überschrieben werden.
Hat jemand schon mal etwas vergleichbares gemacht und/oder könnte mir Tipps geben?
Bin kein Entwickler, aber mit etwas "Input" und Starthilfe ...
Vielen Dank schon mal!
-
Hallo,
Ja.
Andreas
-
Auto-populate groups nachbauener will , junger Padavan.
Dies soll lesen er dazu: http://www.eknori.de/2008-06-23/autopopulategroup-scheduled-agent/ (http://www.eknori.de/2008-06-23/autopopulategroup-scheduled-agent/)
-
@eknori: gelesen und halb verstanden ich habe. Probieren ich werde ...
-
mit Hilfe eines Kollegen aus unserer Entwicklung nutzen wir nun folgenden Code für den Agenten:
-----------------------
Option Public
Option Explicit
Sub Initialize
'#
' Agent findet alle Dokumente in der names.nsf, die eine "1" in dem
' Feld "PhoneNumber_6" (entspricht "Pager Number") haben,
' holt sich daraus die Abbreviated-Namen und schreibt diese in das
' Feld "Members" der Gruppe "Mitarbeiter".
'#
Dim NamesDB As NotesDatabase
Dim dateTime As New NotesDateTime("12/01/94")
Dim Coll As NotesDocumentCollection
Dim sSuchString As String
Dim Doc As NotesDocument
Dim oNameOwner As NotesName
Dim aVerteiler() As String
Dim nCounter As Integer
nCounter = 0
Set NamesDB = New NotesDatabase( "domino/server", "names.nsf")
sSuchString = "PhoneNumber_6='1'"
Set Coll = NamesDB.Search(sSuchString, dateTime, 0)
Msgbox Trim(Str(Coll.Count)) + " Mitarbeiter gefunden." + Chr(13) + "Ok für weiter...."
If Coll.Count > 0 Then
Redim Preserve aVerteiler(Coll.Count)
Set Doc = Coll.GetFirstDocument()
While Not Doc Is Nothing
Set oNameOwner = New NotesName(Doc.GetItemValue ( "FullName" )(0) )
If oNameOwner.Abbreviated = "" Then
Msgbox "Keinen Abbreviated-Namen gefunden bei: " +Doc.GetItemValue ( "FullName" )(0)
Else
aVerteiler(nCounter) = oNameOwner.Abbreviated
nCounter = nCounter +1
End If
Set Doc = Coll.getnextdocument(Doc)
Wend
Else
Msgbox "Es wurden keine Dokumente gefunden!"
Exit Sub
End If
sSuchString = "ListName='Mitarbeiter'"
Set Coll = NamesDB.Search(sSuchString, dateTime, 0)
If Coll.Count = 1 Then
Set Doc = Coll.GetFirstDocument()
Doc.replaceItemValue "Members", aVerteiler
Doc.Save True, False,True
Msgbox "Das Feld Members der Gruppe Mitarbeiter wurde erfolgreich neu geschrieben." + Chr(13) + "Programmende."
Else
Msgbox "Abbruch!" +Chr(13) + "Die Gruppe Mitarbeiter wurde nicht eindeutig gefunden!" + Chr(13) + "Programmende."
End If
End Sub
----------------------------
Vorschläge zur Optimierung sind gerne willkommen ;-)
-
Vorschläge zur Optimierung sind gerne willkommen ;-)
Baue den Agenten in eine separate DB ein, paare das Ganze mit einem Konfigurationsdokument, welches die Selektionsformel und die Zielgruppe aufnimmt und schwupps hast du ein konfigurierbares Pfleg-Die-Gruppen-Instrument.
-
Hallo Uwe,
was entwickeln die Kollegen der Abteilung denn normalerweise? ;D
Funktionstüchtig ist das Teil offensichtlich, aber es fallen gleich drei Dinge auf, die meine Stirn runzeln: Warum wird das Item "FullName" verwendet statt Owner? Da muss im ersten Element nicht zwingend der gewünschte Eintrag stehen (das Ding ist ja auch editierbar)? Warum wird die abbreviated Form übernommen statt der canonical name? Warum wird extra ein Date/Time-Objekt gebildet und wahlfrei belegt anstatt als Parameter für NotesDatabase.Search gleich Nothing zu verwenden?
Bernhard
-
was entwickeln die Kollegen der Abteilung denn normalerweise?
Nette Dinge mit MS VS und SQL
Warum wird das Item "FullName" verwendet statt Owner? Da muss im ersten Element nicht zwingend der gewünschte Eintrag stehen (das Ding ist ja auch editierbar)?
Bei wenigen PersDoks war kein Eintrag im Feld "Owner". Das "Warum?" prüfen wir gerade und dann nehmen wir "Owner".
Warum wird die abbreviated Form übernommen statt der canonical name?
Unwissenheit. Ändern wir.
Warum wird extra ein Date/Time-Objekt gebildet und wahlfrei belegt anstatt als Parameter für NotesDatabase.Search gleich Nothing zu verwenden?
weil der Kollege das nicht besser weiß ... wird aber noch ;-)