Um das Rausziehen von Werten aus der names.nsf voranzubringen, habe ich mich ATA's Sync-Beispiels bedient:
http://atnotes.de/index.php/topic,3630.0.html (http://atnotes.de/index.php/topic,3630.0.html) (Vielen Dank, ATA!)
Das Übernehmen der Adressen funzt fantastisch. Nur die Synchronisation streikt. Fehlermeldung: "Invalid Universal ID. Der Debugger stellt fest, dass das Feld ParDocID nicht in die Variable sUNID geschrieben wird. Was mache ich falsch? Hier der Code:
Dim session As New NotesSession
Dim dbThis As NotesDatabase
Dim dbNAB As NotesDatabase
Dim dc As NotesDocumentCollection
Dim docNAB As NotesDocument
Dim doc As NotesDocument
Dim sUNID As String
Dim LogText As String
Dim LogName As String
Dim i As Integer
Set dbThis = session.CurrentDatabase
Set dbNAB = session.GetDatabase("Serverli","names.nsf") ' # öff. Adressbuch
Set dc = dbThis.AllDocuments ' # alle Personendokumente in eine Collection holen...
If dc.Count > 0 Then
' # Personendokumente gefunden
Set doc = dc.GetFirstDocument
For i = 1 To dc.Count
sUNID = doc.parDocID(0) ' # die UNID des Adressdokumentes lesen
Set docNAB = dbNAB.GetDocumentByUNID(sUNID)
If Not docNAB Is Nothing Then
LogName = docNab.Fullname
LogText = LogName + " hat sich geändert."
doc.OfficePhoneNumber = docNAB.OfficePhoneNumber ' # Synchronisation der Büro-Telefonnummer
doc.GetCity = docNAB.City ' # Synchronisation Wohnort (privat)
'# ...
End If
Set doc = dc.GetNextDocument(doc)
Next
Else
' # Keine Personen-Dokumente gefunden
End If
Vielen Dank für Eure Hilfe!
Danke für den Tipp, nun habe ich auf alle Dokumente einer View umgestellt und siehe da, es klappt soweit.
Der Code:
Dim session As New NotesSession
Dim dbThis As NotesDatabase
Dim View As NotesView
Dim dbNAB As NotesDatabase
Dim dc As NotesDocumentCollection
Dim docNAB As NotesDocument
Dim doc As NotesDocument
Dim sUNID As String
Dim LogText As String
Dim i As Integer
Set dbThis = session.CurrentDatabase
Set dbNAB = session.GetDatabase("Serverli","names.nsf") ' # öff. Adressbuch
Set View = dbThis.GetView("(ParDocID)")
Set doc = View.GetFirstDocument
While Not (doc Is Nothing)
sUNID = doc.ParDocID(0) ' # die UNID des Adressdokumentes lesen
Set docNAB = dbNAB.GetDocumentByUNID(sUNID)
If Not docNAB Is Nothing Then
Dim alterWertPhoneNumber As String
Dim neuerWertPhoneNumber As String
Dim holeName As String
If doc.GetPhoneNumber (0) <> docNAB.PhoneNumber (0) Then
'fürs Log merken, was sich geändert hat:
alterWertPhoneNumber = doc.GetPhoneNumber (0)
holeName = doc.GetNachname(0)
neuerWertPhoneNumber = docNAB.PhoneNumber (0)
'Feldwert drüberbügeln
doc.GetPhoneNumber = docNAB.PhoneNumber (0)
Call doc.Save (True, True)
'nun das Log schreiben:
Dim changelogentry As String
Set doc = dbThis.CreateDocument
doc.Form = "ChangeLog"
changelogentry = Cstr(holeName) + " - Änderung Telefonnummer - neuer Wert: " + Cstr(neuerWertPhoneNumber)
doc.changelog = changelogentry
Call doc.Save( True, True )
End If
End If
Set doc = view.GetNextDocument(doc)
Wend
macht soweit das, was ich möchte. *freu* !
Nur am Schluß bringt er noch ein "The document is not in view " (ParDocID) an dieser Stelle im Debugger:
Set doc = view.GetNextDocument(doc)
Vermutlich weil kein anderes Dokument mehr da ist.