Ich möchte einige felder mit einer änderungshsitorie versehen, d.h. jeder neue eingetragene wert soll in einer liste dokumentiert werden.
nun bin ich echt amateur/anfänger...kann jemand helfen, mir einen einfachen weg beschreiben??
krieg`s nicht hin. wer hilft? wie mache ich eine Änderungshistorie am einfachsten?
- explain
- Erledigt
-
-
Einen einfachen Weg gibt es nicht (zumindest kenne ich keinen).
Wenn Du Notes 6 hast, dann kannst Du für jedes Feld ein Event programmieren, das sich "OnChange" nennt. Damit kann man Änderungen relativ einfach abfángen.Falls das bei Dir nicht geht, oder Dir zu schwierig wird, dann bleibt Dir nur übrig, beim öffnen des Dokuments (bzw. beim ändern des Bearbeitungsmodus) die alten Werte der Felder, die überwacht werden sollen in ein neues Feld zu schreiben und beim speichern zu vergleichen ob sich eine Änderung ergeben hat. Und wenn ja, dann eben diesen Wert dem "Historienfeld" hinzufügen.
Ist alles nicht wirklich ganz einfach und auf jeden Fall ein nicht unerheblicher Aufwand...
-
Der Weg des geringsten Aufwands führt über die automatische Versionierung. Dabei wird je nach Einstellung entweder bei jedem Speichern oder nur bei Bedarf die alte Version mit allen alten Feldwerten separat gespeichert und kann in Ansichten hierarchisch als Historie dargestellt werden. Programmieraufwand=1 Häkchen setzen und 1 Ansicht bauen.
-
im PostOpen der Maske würde ich per Script mir die Felder in ein Array schreiben und dann im QuerrySave vergleichen und die Historie schreiben.
Globals Declarations
Globals Initialize
Maske PostOpen
Maske QuerySaveCodeDim session As New NotesSessionDim doc As NotesDocumentSet doc = Source.DocumentDim historie As Stringhistorie = ""For i = 0 To Ubound(Array, 2) Set item = doc.GetFirstItem(Array(0,i)) If Not item Is Nothing Then temp_TXT = "" For ii = 0 To Ubound(item.Values) temp_TXT = temp_TXT & "#####" & Cstr(item.Values(ii)) Next If temp_TXT <> Array(1,i) And temp_TXT <> "#####" Then If Historie <> "" Then Historie = Historie & "; " End If Historie = Historie & Array(2, i) End If End IfNextIf historie <> "" Then Dim nn As New NotesName(Session.UserName) doc.Historie = Cstr(Now) & " " & nn.Common & Chr(13) & Historie & Chr(13) & Chr(13) & doc.Historie(0)End If
MaskeCode
Alles anzeigenSub FeldArrayFuellen(doc As NotesDocument) Array(0,0) = "FeldName im Dokument" Array(2,0) = "FeldTitel für die Historie" ... Array(0,n) = "FeldName n im Dokument" Array(2,n) = "FeldTitel n für die Historie" For i = 0 To Ubound(Array, 2) Set item = doc.GetFirstItem(Array(0,i)) If Not item Is Nothing Then For ii = 0 To Ubound(item.Values) Array(1,i) = Array(1,i) & "#####" & Cstr(item.Values(ii)) Next End If Next End Sub
Gruß
Dirk -
boah...danke, hast dir sehr viel mühe gemacht...aber das ist zu hoch für mich...verstehe ich nicht...
die anpassung an meine anwendung bekomm ich so nicht hin...
-
über dem Code steht immer wo der Code reinkommt.
- öffne die Maske im Designer,
- unter der Maske hast Du ein 2-geteiltes Fenster
- im rechten Teil klickst Du "Globals" und darunter "Declarations" an
- das rechte Fenster stellst Du auf LotusScript und dann kopierst Du den Code
Dim Array() As String
Dim item As NotesItem
rein
- analog machst Du dies für alle Abschnitte, die ich oben aufgeführt habe
- änder \"Anzahl der Felder\" in die Zahl der Felder, die Du überwachen willst und ziehe von der Zahl 1 ab
- ersetze \" durch "
- willst Du z.B. ein Feld überwachen, welches als Feldname LastName und als Titel in der Maske Nachname stehen hat, dann schreibe
Array(0,0) = "LastName"
Array(2,0) = "Nachname"
- willst Du noch ein Feld mit dem Namen "FirstName" und dem Titel "Vorname" überwachen, dann schreibe zusätzlich noch
Array(0,1) = "FirstName"
Array(2,1) = "Vorname"
- dies machst Du bis alle Felder und Titel im Array drin stehen
In die Maske baust Du ein Feld mit dem Namen Historie. Dieses ist Berechnet und die Berechnungsformel ist Historie.In dem Feld Historie wird dann der Name des Bearbeiters, das Datum, die Zeit und alle geänderten Felder und deren Inhalt angezeigt. Dabei stehen die neusten Einträge immer oben in dem Feld.
Gruß
Dirk -
Ich habe erst letztens eine Klasse geschrieben, um eine Änderungshistorie von Dokumenten einfach zu implementieren.
Siehe:
notes-links.de: History-KlasseIn max. 5 Minuten hast Du damit eine Änderungshistorie.