Domino 9 und frühere Versionen > ND8: Entwicklung
Änderungen in names.nsf als Protokoll?
Peter Klett:
Schau Dir mal die Felderliste von doc an, ich gehe davon aus, dass parDocID entweder nicht exisitiert oder leer ist. Du musst dieses Feld bei Übernahme der Daten dort hineingeschrieben haben, sonst kann das nicht funktionieren.
Wenn das Ganze dann läuft, darfst Du die Feldwerte nicht einfach übernehmen.
doc.OfficePhoneNumber = docNAB.OfficePhoneNumber ' # Synchronisation der Büro-Telefonnummer
würde ich nicht als Synchronisation, sondern als "Drüberbügeln" bezeichnen (sorry, ist nicht böse gemeint). So kannst Du doch keine Veränderung feststellen. Ausserdem speicherst Du Dokumente, die nicht zu speichern wären. -> Replikationsaufkommen -> Gefahr von Replizierkonflikten -> Unnötiges Ändern von LastModified usw.
Dim flagspeichern As Integer
flagspeichern = False
...
If doc.OfficePhoneNumber (0) <> docNAB.OfficePhoneNumber (0) Then
doc.OfficePhoneNumber = docNAB.OfficePhoneNumber
flagspeichern = True
'und fürs Log merken, was sich geändert hat
End If
...
If flagspeichern Then
'Nur speichern, wenn sich etwas geändert hat
Call doc.Save (True, True)
'und Log schreiben: was hat sich bei welchem Mitarbeiter geändert
End If
emadowo:
Hallo Peter, vielen Dank für die Tipps!
Das drüberbügeln hab ich ausgebügelt. :)
Was bleibt, ist das parDocID. Das Feld existiert und ist nicht leer, siehe Bild.
Grüße
Erwin
Peter Klett:
Ist das Feld in allen Dokumenten vorhanden/gefüllt? db.GetDocumentByUnid reagiert nämlich recht barsch auf ein nicht gefundenes Dokument (-> Totalausstieg).
Schau Dir mal im Debugger das doc an, dort die Items, ob parDocID gefüllt ist. Da Du mit db.AllDocuments alle Dokumente der Datenbank anfasst, ist vielleicht das erste Dokument ein Einstellungsdokument oder irgendetwas anderes, was kein parDocID besitzt? Und schon da knallt es.
Pfefferminz-T:
Bei OpenNTF gibt es auch den AuditManager, der Änderungen mit den entsprechenden Feldwerten an Dokumenten mitprotokollieren kann. Vielleicht erfüllt der Deine Anforderungen.
Grüsse,
Thorsten
emadowo:
Danke für den Tipp, nun habe ich auf alle Dokumente einer View umgestellt und siehe da, es klappt soweit.
Der Code:
--- 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
--- Ende Code ---
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.
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln