History automatisch erstellen

  • Hallo,
    kann mir bitte jemand behilflich sein.


    Folgendes Problem:


    Ich habe eine Datenbank, wo ich jede Änderung, wann, wer, Zustandsänderung mit in einer History Tabelle oder ähnlichem mitprotokoliere möchte.


    Hat jemand eine Idee wie ich sowas hinkriege oder noch besser schon was fertiges in der Hand, denn in Script und ich denke das ich dafür notwendig bin ich ein Rokkie...falls ihr mir mailen wollt dubbai33@yahoo.de.


    Vielen Dank im vorraus


    Dubbai


    PS: Bin echt in Zeitnot





    :(

    MfG dubbai


    Sicheres Auftreten bei völliger Ahnungslosigkeit :idea:

  • Hallo Dubbai,


    Ich habe eine kleine Lösung. Vielleicht hilft Dir das weiter:


    Ein Feld: "EditDates" oder auch anders! Mehrfachwerte Zulassen und berechnet.
    Wert:
    @If (! @IsTime(EditDates); @Return (@Now); "");
    @If(@IsDocBeingRecalculated;@Return(EditDates);"");
    @If(!@IsDocBeingSaved; @Return(EditDates); "");
    @If(@IsNewDoc;@Created;@Now : EditDates)


    Ein Feld: "Editors" (Typ: Namen, Mehrfachwerte zulassen und berechnet), verbergen
    Ein Feld: "DispEditors" Berechnet zu Anzeige, Mehrfachwerte zulassen und bei Valedierung berechnen


    Wert Editors:
    @If(@IsDocBeingRecalculated; @Return(Editors); "");
    @If(!@IsDocBeingSaved; @Return(Editors); "");
    @If(@IsNewDoc; @UserName; @UserName : Editors)


    Wert DispEdiorts:
    @Name([CN]; Editors)


    Sollte funktionieren!


    Gruß
    Wolle

  • Hallo Wolle,


    erstmal Danke.


    Hmm noch eine Frage wie programmiere ich das...wenn ich alle Felder in der Maske protokollieren möchte.


    Bedeutet:


    Wann würde die Änderung gemacht?
    Durch wen?
    Vorgangszustand
    Ist Zustand


    Ist das möglich? Entschuldige aber es ist wichtig ..


    Danke im vorraus


    Gruss Dubbai

    MfG dubbai


    Sicheres Auftreten bei völliger Ahnungslosigkeit :idea:

  • Hallo Dubbai,


    ist es nicht etwas gewagt, zu programmieren ohne zu Wissen wo man wie, was in welcher Abhängigkeit von- und zueinander tun sollte/kann?
    Kennst du dich im Designer aus?
    Um wieviele Felder handelt es sich eigentlich?
    Hast du Script Kenntnisse


    Es gibt verschiedene Möglichkeiten dies umzusetzen, ist natürlich abhängig von der Anzahl der zu überwachenden Felder!
    qbaer@web.de

  • Hallo qbaer,


    ich habe Erfahrung im Designer..aber nicht mit der Scriptprogrammierung.
    Kannst DU mir erklären..warum es ein Unterschied sein soll...wenn ich 5 Felder im Dokument überwache(sprich.Historie speicher)oder 20 Felder??
    Ich denke wenn man einmal den Weg kennt erweitert man diesen für X Felder mehr oder???


    Gruss Dubbai

    MfG dubbai


    Sicheres Auftreten bei völliger Ahnungslosigkeit :idea:

  • Bei dem Weg geb ich dir recht, nur lohnt es sich oftmals ab einem gewissen Umfang andere Wege zu wählen.
    Wenn du nur 5 Felder überwachen möchtest, kannst du dies mit Formelsprache locker abdecken, z.B. mit einem 2. Feld, dem du beim Öffnen des Doku den Wert (im PostOpen Event "FIELD Feld1=Feld1_vergleich") übergibst und beim speichern die Feldwerte vergleichst, die Feldwerte die sich unterscheiden kannst du wiederum in einem weiteren Feld hinzufügen mit Uhrzeit und Username, usw...


    Mach dies einmal bei 20 oder mehr Feldern, dies wird mit Script schon übersichtlicher, da du hier die Werte in Variablen ablegenkannst. Ich habe da meine eigene Regel, wenn ich in der Formelsprache mehr als 5 Zeilen benötige, gibt es meist eine sinnvollere Script-Lösung.

  • Hallo qbaer,


    hast Du so ein Script und würdest Du ihm mir überlassen....so dass ich diesen individuell anpassen kann....für 10-20 Felder?
    Denn ich denke die Felder werden sich vermehren.


    Danke


    Gruss Dubbai

    MfG dubbai


    Sicheres Auftreten bei völliger Ahnungslosigkeit :idea:

  • Ich hab mir gestern ein paar Gedanken dazu gemacht und schon eine Lösung parat. Allerdings hoffe ich das ich heute noch hier rauskomme und es dir zuschicken

  • Hi,


    das hier hab ich mal im Web gefunden. Es berücksichtigt alle Felder einer Maske. Getestet hab ich es allerdings noch nicht. Ich kann nicht sagen ob's einwandfrei läuft.
    Vielleicht hilft es dir weiter.


    Axel



    Tracking Complete Edit History
    This code will track the complete edit history of a document. For any field value change, the date, user, fieldname, previous value, and new value
    will be stored in the EditHistory field.


    Step 1:
    Create a Field on your form called EditHistory. Set it to a multi-value text field, computed (formula = EditHistory), separate multiple values when user enters ?;?,
    display separate values with New Line.


    Step 2:
    Declare a dynamic array in the Form (Declarations) section-


    Form (Declarations)
    Dim FieldValues() As String


    Step 3:
    Add the following code to PostModeChange. The code is placed in PostModeChange because there is no reason to build the array of field values if the document
    is not being edited. *If documents open in edit mode, place this code in PostOpen instead of PostModeChange.


    The field values are taken from the Form, not the uidocument in order to avoid tracking hidden notes fields, such as $UpdatedBy.


    Sub Postmodechange(Source As Notesuidocument)
    'build array of current values
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim form As NotesForm
    Dim fieldnum As Integer
    Dim counter As Integer


    Set db = session.CurrentDatabase
    Set doc = Source.Document
    Set form = db.GetForm(doc.Form(0))
    fieldnum = Ubound(form.fields)


    Redim FieldValues(fieldnum,1)


    counter = 0
    Forall field In form.fields
    FieldValues(counter,0) = field
    FieldValues(counter,1) = source.fieldgettext(field)
    counter = counter + 1
    End Forall
    End Sub


    Step 4:
    Add the following code to the end of QuerySave (after all edit checking is complete).


    Sub Querysave(Source As Notesuidocument, Continue As Variant)
    If Not Source.IsNewDoc Then
    Call EditHistory
    End If
    End Sub


    Step 5:
    Create the EditHistory sub -You can copy this code into the Form (Declarations) section. This code adds a line to the EditHistory field for each modified field value.
    The line consists of the date, user name, fieldname, prior value, and new value (tab separated).


    Sub EditHistory
    Dim session As New NotesSession
    Dim workspace As New NotesUIWorkspace
    Dim source As NotesUIDocument
    Dim fieldnum As Integer
    Dim entry As String


    Set source = workspace.CurrentDocument


    For fieldnum = 0 To Ubound(FieldValues)
    If FieldValues(fieldnum,1) <>source.fieldgettext(FieldValues(fieldnum,0)) Then
    entry = Date$+Chr(9)+session.CommonUserName+Chr(9) + FieldValues(fieldnum,0)+Chr(9)+ FieldValues(fieldnum,1)+Chr(9)+_
    source.fieldgettext(FieldValues(fieldnum,0))


    Call source.FieldAppendText("EditHistory",";"+entry)
    End If
    Next


    End Sub

  • Das was du haben möchstest ist eigentlich viel einfacher und fast OHNE programmierung zu haben.
    Du solltes im dokument den eigenschaft "alte dokumenten werden zu antworten" einstellen, und damit wird bei jedem speicherung der alte datensatz als Antwort abgelegt, und damit ist der alt zustand gesichert. Dann mußtest du hingehen, und das Neue dokument funktionalität geben und den letzte version mit dieses dokument zu vergleichen... Das alte dokument findest du z.B. über den $Ref (welches das altuelle dokument identität beinhaltet)

  • Hallo Ronka,


    da sieht man mal wieder die Erfahrung. Auf die einfachen Sachen kommt man immer zu spät, jetzt braucht er nur noch etwas das Ihm die "ÄNDERUNGEN" protokolliert!