krieg`s nicht hin. wer hilft? wie mache ich eine Änderungshistorie am einfachsten?

  • 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??

  • 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.

    • Offizieller Beitrag

    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

    Code
    Dim Array() As StringDim item As NotesItem


    Globals Initialize

    Code
    Redim Array(2,"Anzahl der Felder")


    Maske PostOpen

    Code
    Dim doc As NotesDocumentSet doc = source.DocumentCall FeldArrayFuellen(doc)


    Maske QuerySave

    Code
    Dim 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


    Maske


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

    • Offizieller Beitrag

    ü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

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein