Domino 9 und frühere Versionen > Entwicklung
Historienfunktion aufpeppen
(1/1)
Don Pasquale:
Hallo Leute,
ich habe hier eine nette Historienfunktion gefunden, die aber leider immer wieder das alte Feld überschreibt. Was aber nicht der rechte Sinn einer Protokollfunktion ist.
Hat da jemand eine Idee, wie ich dem Feld $Historie etwas mehr Gedächtnis beibringe ?
--- Code: ---Sub Querysave(Source As Notesuidocument, Continue As Variant)
Stop
If Source.isnewdoc Then Exit Sub
cl$=""
On Error Resume Next
Forall v In vals
f$=Listtag(v)
Set i=source.document.getfirstitem(f$)
If i.text<>v Then
cl$=cl$+f$+": "+Left(v,1000)+" --> "+Left$(i.text,1000)+Chr(10)
v=i.text
End If
End Forall
If cl$<>"" Then
Dim s As New notessession
entry$= Chr$(10) +_
Cstr(Now)+" - Änderung durchgeführt von "+ s.commonusername+ Chr(10)+Trim$(cl$)+Chr(10)+" "
source.document.~$Historie= entry$
End If
End Sub
--- Ende Code ---
Vielen Dank für Eure Hilfe
Don Pasquale
ata:
... das du den Inhalt überschreibst, kann ich aus dem Code lesen. Wenn du den neuen Wert anhängenwillst, mußt du zunächst den Inhalt des Feldes in eine Variant-Variable laden.
Wenn in dem Feld bereits ein Inhalt war, dann wird es in der Variablen als Array gehandhabt.
In Notes 5 gibt es die Funktion ArrayAppend(...)
Damit bist du in der Lage deiner Variant-Variablen einen Wert anzuhängen.
TIP: mach aus dem Historienfeld ein MultipleValue-Feld - neue Werte mit neuer Zeile anzeigen - damit sparst du den Chr(10)
ata
wflamme:
http://www.dominopower.com/
A flexible approach to keeping a history of recent edits
Ich hatte irgendwo auch mal einen Link auf einen OOP-orientierten Ansatz, der mir gut gefiel - mal gucken, ev. finde ich das noch.
Grüße,
Wolfgang
Don Pasquale:
@Ata : Großer Meister
hier meine Lösung (genauso wie Du es beschrieben hast.)
Im Feld Historie habe ich
Mehrfachwerte zulassen
Werte trennen bei Eingabe mit Leerzeile
Getrennte Werte Anzeigen mit Leerzeile
Das mit den Mehrfachwerten war auch wohl weshalb alle meine Ansätze nicht geklappt hatten.
--- Code: ---Sub Postopen(Source As Notesuidocument)
Stop
Forall i In source.document.items
show_hist = True
If Lcase(Left$(i.name,3))="tm_" Then show_hist = False ' diese felder nicht sammeln
If Left$(i.name,1)<>"$" And show_hist Then vals(Lcase(i.name))=i.text
End Forall
End Sub
Sub Postsave(Source As Notesuidocument)
Forall i In source.document.items
show_hist = True
If Lcase(Left$(i.name,3))="tm_" Then show_hist = False ' diese felder ignorieren
If Left$(i.name,1)<>"$" And show_hist Then vals(Lcase(i.name))=i.text
End Forall
End Sub
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Stop
If Source.isnewdoc Then Exit Sub
cl$=""
On Error Resume Next
Forall v In vals
f$=Listtag(v)
Set i=source.document.getfirstitem(f$)
If i.text<>v Then
cl$=cl$+f$+": "+Left(v,1000)+" --> "+Left$(i.text,1000)+Chr(10)
v=i.text
End If
End Forall
If cl$<>"" Then
Dim s As New notessession
entry$= Chr$(10) +_
Cstr(Now)+" - Änderung durchgeführt von "+ s.commonusername+ Chr(10)+Trim$(cl$)+Chr(10)+" "
source.document.~$Historie= Arrayappend(source.document.~$Historie, entry$ )
End If
End Sub
--- Ende Code ---
und im Feld $Historie
@If(@IsNewDoc; ""; $Historie)
So funzt es prima.
;D ;D ;D
Vielen Dank
Ciao
Don Pasquale
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln