Autor Thema: Änderungen in names.nsf als Protokoll?  (Gelesen 4439 mal)

Offline emadowo

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
  • Danke für dieses Forum!
Änderungen in names.nsf als Protokoll?
« am: 18.04.12 - 11:48:17 »
Hallo Notes-Gemeinde,
in der Firma gibt es Kolleg/inn/en (z.B. Personalabteilung), die sollten davon wissen, wenn sich an den Kontaktdaten (Telefon-Nummer, Adresse in der names.nsf) eines Mitarbeiters etwas ändert.

Habt ihr Ideen, wie man so etwas realisieren kann?

In einer separaten Mitarbeiter-Datenbank ziehe ich "live" diverse Felder zur Anzeige mit @NameLookup( [Exhaustive] ; Name ; <Feld in names.nsf> ) raus. Nur bekomme ich die Änderung ja nicht mit. Kann ich da ansetzen?

Vielen Dank für eure Hilfe!

Grüße aus Bayern
Erwin
Erwin Maier
IT-Administration Genossenschaftsbank
Notes R9.01
Kenntnisse: Formelsprache, Script

klaussal

  • Gast
Re: Änderungen in names.nsf als Protokoll?
« Antwort #1 am: 18.04.12 - 11:57:35 »
Wenn's etwas kosten darf: http://www.qkom.de/ibmdomino/securtrac

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Änderungen in names.nsf als Protokoll?
« Antwort #2 am: 18.04.12 - 14:52:18 »
Wenn Du schon eine separate DB hast, die Daten aus dem DD zieht, dann hast Du doch schon eigentlich fast alles. Beim Auslesen brauchst Du doch nur zu vergleichen, ob es Unterschiede zwischen dem DD und Deiner DB gibt und das entsprechend loggen und / oder Mails dazu verschicken.
Mit @functions wirst Du dabei allerdings nicht glücklich.

Ich habe auch mehrere Anwendungen entwicklet, die derartige Abgleiche durchführt. Eine Anwendung als Self-Service-AddOn zum DD, die wohl Eurer "Mitarbeiter-DB" entsprechen dürfte, protokolliert / informiert auch entsprechend:
- Schau im Setup nach, welche DD-Items wohin in die DB übernommen werden sollen (oder vice versa)
- Vergleiche diese Items. Unterschiede? Melden und übernehmen.
Eigentlich kein Hexenwerk.

Bernhard

Offline emadowo

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
  • Danke für dieses Forum!
Re: Änderungen in names.nsf als Protokoll?
« Antwort #3 am: 19.04.12 - 09:16:19 »
Bernhard, was meinst du mit "schau im Setup nach", was hast du da definiert?

Ich hätte nun das jeweilige Feld in der Mitarbeiter-DB genommen, das entsprechende Feld aus der names.nsf ausgelesen und bei Differenz ins Feld changelog "Feld xy hat sich geändert" reingeschrieben.

« Letzte Änderung: 19.04.12 - 09:19:49 von earchy »
Erwin Maier
IT-Administration Genossenschaftsbank
Notes R9.01
Kenntnisse: Formelsprache, Script

Offline emadowo

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
  • Danke für dieses Forum!
Re: Änderungen in names.nsf als Protokoll?
« Antwort #4 am: 04.05.12 - 12:25:50 »
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   (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:
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!
Erwin Maier
IT-Administration Genossenschaftsbank
Notes R9.01
Kenntnisse: Formelsprache, Script

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Änderungen in names.nsf als Protokoll?
« Antwort #5 am: 04.05.12 - 13:09:40 »
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

Offline emadowo

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
  • Danke für dieses Forum!
Re: Änderungen in names.nsf als Protokoll?
« Antwort #6 am: 04.05.12 - 14:09:13 »
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
Erwin Maier
IT-Administration Genossenschaftsbank
Notes R9.01
Kenntnisse: Formelsprache, Script

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Änderungen in names.nsf als Protokoll?
« Antwort #7 am: 04.05.12 - 14:18:26 »
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.

Offline Pfefferminz-T

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.204
Re: Änderungen in names.nsf als Protokoll?
« Antwort #8 am: 04.05.12 - 15:33:05 »
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
Grüsse,
Thorsten

Offline emadowo

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
  • Danke für dieses Forum!
Re: Änderungen in names.nsf als Protokoll?
« Antwort #9 am: 04.05.12 - 16:05:51 »
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
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.

Erwin Maier
IT-Administration Genossenschaftsbank
Notes R9.01
Kenntnisse: Formelsprache, Script

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz