Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: tokio_city am 02.06.05 - 12:04:41
-
Hallo Notes Community,
auf der Suche nach einer Funktion, wie man Verteiler, die im Adressbuch stehen über eine Funktion ausliest und dabei Unterverteiler berücksichtigt, um dann letztlich eine Namensliste zurückzugeben, bin ich auf folgende Lösung gestoßen:
http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/79e19d7831735367852570050021e579?OpenDocument
Leider gibt es im Funktionsbereich (Function GetGroupMembers) in folgenden Zeile bei mir eine Fehlermeldung:
Set dbNAB = GetAddressBook()
Soweit ich weiss, sind doch die AddressBook properties wie folgt:
notesDatabaseArray = notesSession.AddressBooks
Mein Ziel ist es nun a) das Script zum Laufen zu bringen und b) über einen Button aus einer Ansicht heraus zu starten.
Könnt ihr mir da weiterhelfen?
-
Hallo
Was genau ist dein Problem?
Was steht in der Funktion getAdressBook() ???
Dort liegt bestimmt der Fehler.
Dirk
-
"... gibt es ... bei mir eine Fehlermeldung:"
Das ist immer wieder nett für Hilfsbereite hier im Forum: Wir dürfen jetzt auch noch über die Fehlermeldung rätseln, die da wohl kommen könnte. Also muss man sich auch noch irgendwelchen Code von irgendwo aus dem Internet anschauen.
Okay, ich habe es mir angeschaut: Die Function GetAddressBook wurde von Anthony schlicht vergessen zu posten. Logisch, dass es dann ohne diese Function "eine Fehlermeldung" gibt.
Bernhard
-
Hätte ich mir auch anschauen sollen.
Ist aber doch kein Problem sie kurz zu erstellen ;)
Dirk
-
Sorry,
hätte ich natürlich richtig beschreiben sollen. Mein Fehler, Asche auf mein Haupt... aber ich bin noch lernfähig... ;)
-
Ist aber doch kein Problem sie kurz zu erstellen ;)
Das sehe ich genauso. Wer rekursiv mit group memberships umgehen will und sich dazu fremden Codes oder Algorithmen bedient (nicht unbedingt sträflich !), sollte zumindest wissen, wie er das gewünschte AdressBook instantiieren kann. Wobei gerade dieses ja nicht der einfachste Punkt ist und von den jeweiligen Gegebenheiten abhängt (Nur das EINE Server-NAMES.NSF oder mehrere ? Sollen lokale Repliken im offline-Betrieb berücksichtigt werden ? Usw. usf.).
Bernhard
PS: Nix gegen konkrete Fragen auf dem Wege dorthin ...
-
Hallo,
für meinen Bedarf soll nur auf ein Addressbuch zugegriffen werden und zwar auf den Standard, der bei mir cnnames.nsf heisst und direkt auf dem Server liegt, wo auch die Applikation läuft, von der das Script gestartet wird. Also keine Berücksichtigung von lokalen Repliken, keine Auswahl von X-Adressbüchern usw.
-
Dann hast Du ja alles was Du benötigst :) :
ServerName , Datenbankname
Set dbADR = New NotesDatabase( .....
-
Standard, der bei mir cnnames.nsf heisst und direkt auf dem Server liegt
Standard ? Habe ich da was verpasst ? Standard ist NAMES.NSF.
Ansonsten gilt das, was Dirk gesagt hat: Schreib Dir die Function GetAddressBook, in der Du Deine gewünschte DB instantiierst, und gut ist.
Bernhard
-
Ok, ich habe das bisher so gemacht:
server$ = NotesDB.server
Set NotesDB_New = New notesdatabase("","")
flag = NotesDB_New.open(server$, "cnnames.nsf")
Set view = NotesDB_New.getview("Groups")
Set NotesDocument= Notesview.getdocumentbykey("mein_Verteiler")
Field = NotesDocument.getitemvalue("members")
Habe ich das richtig verstanden, dass ich das Script mit allen weiteren Angaben in eine neue Funktion einfüge und auf diese dann in getAdressBook(hier integrieren) referiere?
-
Wenn Du das in den bestehenden Code aus dem LDD einfügen willst: Nein, dann hast Du das nicht richtig verstanden.
Und nochmal: Warum heisst Dein Adressbuch eigentlich nicht NAMES.NSF, wenn es doch das Standard-PubNAB sein soll ?
Bernhard
-
Hallo Bernhard,
ich würde - wie Du schreibst - ein neue Funktion erstellen, wo das Adressbuch angegeben wird. Dort könnte man im Bedarfsfall auch weitere Adressbücher zur Auswahl einfügen. Dann würde ich aus der Function GetGroupMembers auf die neue Funktion verweisen.
Zum Namen: Ich habe gerade mal nachgeschaut und Du hast recht, cnnames.nsf ist doch nur eine Replik des Standard-PubNAB. In wie fern ist eigentlich der Name von Belangen?
-
Du musst die Funktion "GetAddressBook()" erstellen.
Function GetAddressBook as NotesDatabase
strServer = "YourServerName/??(??"
strDB = "names.nsf" 'ODER ;-)
Set dbTmp = New notesdatabase(strserver , strDB)
if Not( dbTmp.Open ) Then
call dbTmp.Open( (strserver , strDB)
end if
set GetAddressBook = dbTmp
Delete dbTmp
end FUnction
... so oder so ähnlich
Dirk
-
Alle verfügbaren Adressbücher bekommt man mit
adrbooks = session.AddressBooks
Und da ist das dann wurscht ob Namen.nsf oder cnnames.nsf oder hurlebautz.nsf
Gilt für Public Private und Directories und gibt es seit V5.05
-
Im Prinzip ja, wobei ich meine, die Property ist für LS sicher älter als 5.0.5. Man darf allerdings nicht vergessen, dass viele, viele Applikationen "names.nsf" fest verdrahtet verwenden, um DAS Adressbuch zu bekommen. Ein Umbenennen, was spätestens seit R4 via den notes.ini Eintrag names.nsf möglich war, ist daher nicht besonders empfehlenswert.
-
Alle verfügbaren Adressbücher bekommt man mit
adrbooks = session.AddressBooks
Jo, und dabei bekommt man auch Adressbücher, die man eventuell gar nicht gebarauchen kann. Sooo einfach ist es dann in ernsthaften Umgebungen leider doch nicht ...
Bernhard
-
Alle verfügbaren Adressbücher bekommt man mit
adrbooks = session.AddressBooks
Jo, und dabei bekommt man auch Adressbücher, die man eventuell gar nicht gebarauchen kann. Sooo einfach ist es dann in ernsthaften Umgebungen leider doch nicht ...
Bernhard
Sorry Bernhard aber das sehe ich nicht so.
Da bekomme ich erst einmal alle Adressbücher dieser Session ohne Kopfstände machen zu müssen.
Hab ich die dann, kann ich ja immer noch die welche ich nicht will ausschließen. Also z.B. alle Privaten Adressbücher will ich nicht, dann mit der Eigenschaft b.IsPrivateAddressBook in einer For Schleife die halt nicht hernehmen. Und wenn ich dann noch ausschließlich die haben will die einen bestimmten Namen haben kann ich das ja auch noch machen indem ich einfach den b.filename oder den b.filepath benutze und den gegen eine hinterlegte Liste prüfen lasse.
Also ist es doch soo einfach.
-
Nix gegen den Erhalt aller verfügbaren Adressbücher, Thomas. Mir ging es um die brauchbaren. Und da ist es schon nicht mehr so trivial, bei einer lokalen Installation von öffentlichen Adressbüchern doppelte zu erkennen und private von öffentlichen zu unterscheiden. Für absolute beginners zumindest.
Für uns beide ist es natürlich trivial. Der Anfänger sollte sich aber mit der Problematik erstmal auseinandersetzen und diese versuchen zu verstehen. Meinst Du nicht ?
Bernhard
-
Gut so kann ich die Aussage akzeptieren 8)
-
Hallo an alle Teilnehmer,
ich wollte mich noch für die rege Beteiligung bedanken und habe den Vorschlag von Dirk (Antwort 12) aufgenommen und für meine Verhältnisse erfolgreich angepasst, es wird übrigens in einem Adressbuch gesucht ;).
Dennoch weiss ich jetzt auch wie man alle Adressbücher ansteuert und wo die Probleme liegen können. Wieder einmal 'ne Menge dazu gelernt!
Eine letzte Frage habe ich aber noch, bevor ich den Thread auf erledigt stelle: Gibt es eine Begrenzung an Unterverteilern, bzw. Durchläufen, bis das Script "den Geist" aufgibt. Ich habe da mal was von sechs Ebenen/Unterverteilern gehört, ist das korrekt? - Ich hoffe, ich habe mich verständlich ausgedrückt...
-
6 Levels "Group in Group" war das Limit in R4, seither ist es etwas komplizierter. Für solche Fragen hilft dieses Dokument (http://www.thenorth.com/northern.nsf/ac567d6535ab069785256a00004d66dc/4100857248b8b82185256d350058f7e4!OpenDocument), das von Andrew Pollak gepflegt wird.
-
Vielen Dank, damit ist auch meine letzte Frage - für heute - beantwortet... Iucundi acti labores.
-
Hier verwechselst Du Henne und Ei: Der Code bekommt kein Problem, aber Du kannst nur eine endliche Anzahl von Gruppen in Gruppen im PubNAB anlegen, damit diese dann vom Client oder vom Server noch aufgelöst werden können. Insofern hat das eine nichts mit dem anderen zu tun.
Bernhard
-
Hallo Bernhard,
ich bezog mich auf Gruppen in Gruppen im PubNAB. Mir gings also um die Hennen in meinem Stall und nicht um die maximal produzierbaren Eier. Ich glaube das wars auch heute für mich... ;)