Hallo zusammen,
ich habe eine Maske bei welcher hin und wieder Änderungen vorgenommen werden. Wie kann ich eine Art "History" am Ende der Maske erstellen, die auflistet, welche Person zu welchem Datum das Dokument verändert hat???
Gruß
Benny
Hallo zusammen,
ich habe eine Maske bei welcher hin und wieder Änderungen vorgenommen werden. Wie kann ich eine Art "History" am Ende der Maske erstellen, die auflistet, welche Person zu welchem Datum das Dokument verändert hat???
Gruß
Benny
Vom Prinzip her im QueryOpen die aktuellen Feldwerte in temporären Feldern oder besser Script Variablen speichern und beim Speichern prüfen welche geändert wurden.
Dann kannst du dir entsprechend noch das Datum und einen Text zusammensetzen und dies in ein History Feld anhängen
Kannst du mit vielleicht ein bisschen näher beschreiben wie ich vorgehen soll...Ich bin noch nicht so fit in Notes...
Gruß
Benny
QueryOpen
doc.Feld1BKP = doc.Feld1
doc.Feld2BKP = doc.Feld2
....
QuerySave
set item = doc.GetFirstItem("fd_History")
if doc.Feld1BKP(0) <> doc.Feld1 then
sText = "Feld1 wurde von " & doc.Feld1BKP(0) & " auf " & doc.Feld1(0) & " geändert"
call item.AppendToTextList(sText)
end if
In Deinem Fall wuerden 2 Felder genuegen....lastEditor und lastDateEdit z.B. nur. Koennen natuerlich auch anders heissen.
Und bei jedem Speichern..also im Querysave-event...werden die Felder um die dementsprechenden Werte erweitert.
Wie gesagt..2 Felder - hier mal LastEditor und LastEditDate genannt und in den Querysave folgendes:
In der Formelsprache saehe das so aus:
field lastEditor := lastEditor:@name([abbreviate];@username);
field lastEditDate := lastEditDate:@text(@today);
""
Die beiden Felder computed when composed ..Formel = "". In einer Tabelle nebeneinander. Mehrfachwerte zulassen, einzelne Werte anzeigen in neuer Linie.
Mal so ganz grob
Hi,
danke für die Hilfe, es funktioniert, aber die Auflistung ist ein bisschen schlecht. Die Auflistung ist wie folgt:
Name;Name;Name;Name;Name;... Datum;Datum;Datum;...
Wie bekomme ich das jetzt schön geordnet. Beispiel:
Name Datum
Name Datum
Name Datum
. .
. .
. .
ich schrieb es oben..2 Felder, Tabelle mit 2 Zellen..usw.
Warum so kompliziert? Es gibt nicht umsonst die Felder $UpdatedBy und $Revisions...
Und die helfen bei der Anzeige??
Mein Gott, natürlich helfen die! Weil, da steht z.B. drin:
$UpdatedBy
"CN=Username/O=Firma"
"CN=Servername/O=Org"
$Revisions
31.01.2005 17:44:01 CET
01.02.2005 18:23:00 CET
Ich zitiere gern die Anfangsfrage:
"Wie kann ich eine Art "History" am Ende der Maske erstellen, die auflistet, welche Person zu welchem Datum das Dokument verändert hat???"
So, und nun darfst du dreimal raten, wer wann an dem Dokument dran war. Und du musst nicht einmal irgendwelche kruden Verrenkungen mit selbst gebastelten Feldern anstellen...
Darueber biste leider auf dem Holzwege.
Denn mitunter, aber nur manchmal, stehen in beiden Feldern unterschiedlich viele Werte. Selbst Anfaenger erfahren in Schulungen, dass man dgenau die beiden Felder nicht fuer eine Bearbeitungshistorie verwenden kann.
Das interessiert mich nun doch. Unter welchen Umständen soll das denn sein?
Die Hilfe sagt nämlich eindeutig
Zitat
If a document contains an Authors field, Designer automatically stores the names of the users who have edited that document in an internal field called $UpdatedBy. Servers involved in replication are not considered editors, so they're not tracked in this list.
Allerdings funktioniert das auch mit Masken ohne Autorenfeld, ist also nicht ganz so wörtlich zu nehmen...
Wenn ich allerdings im Advanced-Tab der DB-Eigenschaften unterschiedliche Limits für die beiden Felder setze, falle ich damit auf die Nase, das ist richtig.
Hmmm, im $Updatedby Feld wird nur ein Name eingetragen wenn er sich vom letzten in der Liste unterscheidet. Hingegen im $revisions feld immer ein Speicherdatum.
Bedeutet...wenn Du dreimal das Dok bearbeitest stehst nur Du in dem Feld $Updatedby...im Feld $Revisions aber mehrere Werte. Leicht zu testen....erstelle ein Dok und speicher es ein paarmal.
Also einmal zum Prinzisätzlichen und Grundiziellen:
Alle in einer Maske hinterlegten Felder oder "Aktionsfüllungen" werden nur dann revisioniert, wenn das Dokument MIT DER MASKE geändert wurde - die Felder $UpdatedBy und $Revisions werden auch gefüllt, wenn ein Agent oder der ADminP-Task das Dokument ändert.
Und jetzt eine Lösung für unseren Freund, wie ich sie aus einer Notes Versions 3-Datenbank herausgeklaubt habe und bis heute in allen möglichen Masken verwende:
Ganz oben in der Maske stehen die Felder
TimesModified ZAHL BERECHNET
@If(@IsNewDoc; 0; TimesModified + @IsDocBeingSaved)
PastAuthors TEXT BERECHNET
@If(@IsNewDoc; @Name([CN]; @UserName); @If(@IsDocBeingSaved; @If(TimesModified <= 0; @Name([CN]; @UserName); PastAuthors : @Name([CN]; @UserName)); PastAuthors))
PastEditDates TEXT BERECHNET
@If(@IsNewDoc; @Text(@Now); @If(@IsDocBeingSaved; @If(TimesModified <= 0; @Text(@Now); PastEditDates : @Text(@Now)); PastEditDates))
Ganz unten in der Maske ist ein zusammenklappbarer Abschnitt, der beim Drucken oder Kopieren in die Zwischenablage verborgen wird und einen Tabstop enthält. Dort steht ein Feld TEXT BERECHNET ZUR ANZEIGE mit
@If(TimesModified <= 0; ""; PastAuthors + @Char(9) + @Text(PastEditDates))
In meinen Agenten habe ich dann immer einen Abschnitt
FIELD PastAuthors := PastAuthors : (@Name([CN];UserName) + " (Makroxxxx)");
FIELD PastEditDates := PastEditDates : @Text(@Now;"D0S0");
FIELD TimesModified := TimesModified + 1;
Damit wird auch das Dokumentiert.
Und jetzt die Falle dabei: das geht für neue Datenbanken problemlos, bei Datenbanken, die bereits Dokumete enthalten, kann das @If(@IsNewDoc) bei TimesModified zu undefinierten Zahlen führen, die Fehler produzieren. Das alles kann man hinbekommen, indem man mit einem Zweizeiler alle bestehenden Dokumente einmal aus dem UpdatedBy und $Revision füllt mit
@If(@IsAvailable(TimesModified) & @IsNumber(TimesModified;@Return("");NULL);
FIELD TimesModified:=1;
FIELD PastEditDates:=@Subset(@Text($Revisions);-1);
FIELD PastAuthors:=@Name([CN];@Subset($UpdatedBy;-1))
Wenn man in einem Agenten einmal einen ERROR in das PastEditDates-Feld bringt, z.B. indem man das D0S0 nicht mit Gänsefüßchen umschließt, dann sind alle Einträge der Datumswerte auf ERROR. Das ist unschön - und nur schwer wieder herauszubekommen. Das ist die einzige Warnung, die ich geben muß.
@RockWilder....und Du erzaehle mir nochmal was von "kruden" Verrenkungen :lol:
Die Lösung von LN4Ever ist ja ganz nett, führt aber bei relativ leicht zu Replizierkonflikten, wenn Dokumente auf verschiedenen Servern bearbeitet werden ...
Und erzähle mir niemand, dass sowas schon nicht passiere. User schaffen das.
Wenn das gleiche Dokument zwischen zwei Replikationsintervallen auf verschiedenen Lokationen (ob Server oder lokale Replik, ist dabei egal) editiert wird, führt das eigentlich immer zu Replikationskonflikten. Auch ohne History.