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