Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: antonio945 am 03.04.12 - 14:21:19
-
Hallo!
Ich habe folgendes Script in einen Button in meine Access-DB eingebunden.
Das Script soll mir alle Inhalte in eine Tabelle schreiben.
Problem:
Das Script arbeitet alles ab, bringt aber leider zum Schluss eine Fehlermeldung Error-Nr 91
'Objektvariable oder With-Blockvariable nicht festgelegt '
Zuätzlich hätte ich noch gerne, dass mein Code nur ein Adressbuch mit dem Namen "People" durchläuft.
Gibt es hierzu eine Möglickeit?
Gruß antonio
Public Function fctReadAdressbook()
On Error GoTo ErrorHandling
Dim session As Object
Dim db As Object
Dim doc As Object, dc1 As Object, doc1 As Object
Dim exist As Boolean
Dim R As Recordset
Set session = CreateObject("Notes.NotesSession")
Set db = session.GETDATABASE("sstrdm10.wk.dcx.com/Server/Prod/DCX", "names.nsf")
If db.IsOpen = False Then
db.OPENMAIL
End If
Set dc1 = db.Alldocuments
Set doc1 = dc1.GETFIRSTDOCUMENT
While Not doc1 Is Nothing
Set doc1 = dc1.GETNEXTDOCUMENT(doc1)
If doc1.getitemvalue("Department")(0) = "AB/TEST" then
Set R = CurrentDb.OpenRecordset("SELECT * from User")
R.AddNew
R!Lastname = Nz(doc1.getitemvalue("Lastname")(0))
R!Firstname = Nz(doc1.getitemvalue("Firstname")(0))
R!IDName = Nz(doc1.getitemvalue("ShortName")(0))
R!Abteilung = Nz(doc1.getitemvalue("Department")(0))
R.Update
End If
Wend
R.Close: Set R = Nothing
db.Close: Set db = Nothing
Exit_NächsterDatensatz:
Exit Function
ErrorHandling:
Debug.Print Err.Description, Err.Number
End Function
-
Das GetNextDocument steht an der falschen Position - es ist logisch, dass es in der Zeile beim letzten Dokument der Collection knallt. Ausserdem wird durch die falsche Stelle auch gleich mal immer das erste Dokument ausgelassen.
Wegen Adressbuch "People": Warum wird dieses denn nicht geöffnet, wenn es erwünscht wird??
Bernhard
-
Ja, nimm anstatt names.nsf people.nsf
Du machst ein getFirstDocument
dann while not is nothing
und dann sofort getNextdocument.
1. Das erste Dokument wird nicht verarbeitet
2. Rate mal was beim letzten Dokument passiert.
Bernhard ich muss schneller tippen lernen. ;D
-
Hallo,
vielen Dank für die schnelle Rückmeldung.
Habe nun mal names.nsf durch people.nsf
ersetzt und funktioniert.
Die Zeile
Set doc1 = dc1.GETNEXTDOCUMENT(doc1)
habe ich nun mal am Ende vor die Zeile
Wend
gesetzt, leider habe ich nun das Problem, dass nach dem ersten gefundenen Eintrag zu
If doc1.getitemvalue("Department")(0) = "AB/TEST" then
die Bedingung erfüllt ist und ich nur einen Adressbucheintrag erhalte.
Ich möchte aber alle Adressen aus dem Adressbuch mit
doc1.getitemvalue("Department")(0) = "AB/TEST" erhalten.
Wie kann man das umsetzen?
Gruß antonio
-
Hä?? Code!
-
Hallo,
hier nochmal mein Code.
Public Function fctReadAdressbook()
On Error GoTo ErrorHandling
Dim session As Object
Dim db As Object
Dim doc As Object, dc1 As Object, doc1 As Object
Dim exist As Boolean
Dim R As Recordset
Set session = CreateObject("Notes.NotesSession")
Set db = session.GETDATABASE("sstrdm10.wk.dcx.com/Server/Prod/DCX", "People.nsf")
If db.IsOpen = False Then
db.OPENMAIL
End If
Set dc1 = db.Alldocuments
Set doc1 = dc1.GETFIRSTDOCUMENT
While Not doc1 Is Nothing
If doc1.getitemvalue("Department")(0) = "AB/TEST" then
Set R = CurrentDb.OpenRecordset("SELECT * from User")
R.AddNew
R!Lastname = Nz(doc1.getitemvalue("Lastname")(0))
R!Firstname = Nz(doc1.getitemvalue("Firstname")(0))
R!IDName = Nz(doc1.getitemvalue("ShortName")(0))
R!Abteilung = Nz(doc1.getitemvalue("Department")(0))
R.Update
End If
Set doc1 = dc1.GETNEXTDOCUMENT(doc1)
Wend
R.Close: Set R = Nothing
db.Close: Set db = Nothing
Exit_NächsterDatensatz:
Exit Function
ErrorHandling:
Debug.Print Err.Description, Err.Number
End Function
-
Damit bekommst Du doch alle Einträge, die die Bedingung erfüllen ...
Bernhard
-
leider bekomme ich nur immer einen Datensatz als Ergebnbis?
Gruß antonie
-
Set db = session.GETDATABASE("sstrdm10.wk.dcx.com/Server/Prod/DCX", "People.nsf")
If db.IsOpen = False Then
db.OPENMAIL
End If
Kann es sein, dass es die Datenbank nicht gibt? Wenn die Datenbank nicht geöffnet werden konnte, nimmst Du stattdessen die Maildatenbank des Benutzers. Und da ist vielleicht genau ein Dokument drin, dass die Bedingung erfüllt. Frag mich nicht nach der dahinter liegenden Logik, ist Dein Script :)
-
Hallo zusammen,
habe das Problem gefunden.
Ein Feld meiner Tabelle hatte einen Primärschlüssel ohne Duplicate.
In meiner der Adressdatenbank von Notes waren aber doppelte Einträge.
Nach der Änderung war das Problem gelöst.
Nun noch eine Frage zum Schluss:
Wenn ich meiner Adressdatenbank mit dem Zusatz ...."People.nsf" angebe funktioniert das Script
'Set db = session.GETDATABASE("sstrdm10.wk.dcx.com/Server/Prod/DCX", "People.nsf") ==> Script i.O:
wenn ich mir die Eigenschaften in meiner Noteskachel Peaople- Auswahl Datenbank / Eigenschaften ansehe,
ist dort als Dateinmae ...."address/namesldo.nsf")
für People aufgeführt - siehe nachfolgend.
Welcher Dateiname hat jetzt Gültigkeit bzw. muss eingesetzt werden oder haben beide Ihre Berechtigung?
Set db = session.GETDATABASE("sstrdm10.wk.dcx.com/Server/Prod/DCX", "address/namesldo.nsf") ==> Script ebenfalls i.O:
Gruß antonio
-
"People" ist der Datenbank-Titel und spielt (programmatisch) keinerlei Rolle. Die DB kann man auch "Leberwurscht" nennen.
Da das Öffnen von people.nsf funktioniert, muss es auch eine DB mit diesem Dateinamen geben! namesldo.nsf ist physisch ein anderes File.
Bernhard
-
Hallo Antonio,
auf dem Server sstrdm10 gibt es definitiv KEINE Datenbank die People.nsf heisst, hab eben nachgeschaut :)
Wenn nach dem "Set db = session...:" die Datenbank nicht offen ist dann gibt es sie nicht,
durch das db.openmail wird dann, wie Peter Klett schon erwähnt hat, stattdessen dein Mailfile
geöffnet und die darin enthaltenen Personendokumente werden gefunden.
Wenn du das Adressbuch meinst in dem domänenübergreifend alle User stehen
dann musst du address/namesldo.nsf verwenden
(Dieses Adressbuch heisst aber nur bei deinem Arbeitgeber so, das ist kein Standardname!)
Wunder dich nicht wenn dein Agent dann sehr lange läuft, immerhin muss er ca 230000 Dokumente anschauen.
Gruss
Peter
-
Hallo Pyewacket,
du hast recht, mein Adressbuch indem alle User stehen heist: ....address/namesldo.
Vielen Dank nochmals an alle.
Mein Script läuft jetzt so wie ich es wollte.
Gruß Antonio :) ;) :D