Häufig muss der Administrator umständlich schauen, wer, wann welche Daten im System erstellt, geändert oder gelöscht hat. Navision stellt hierzu im Standard die konfigurierbare Aufzeichnung von Datenänderungen zur Verfügung. Was aber fehlt, ist die Möglichkeit diese Änderung an der Stelle anzeigen zu lassen, die den Anwender interessiert. Neben den datenschutzrechtlichen Belangen, auf die ich an dieser Stelle nur hinweisen möchte, steht die einfache technische Umsetzung im Vordergrund. Nachfolgend möchte ich die Lösung präsentieren, die es erlaubt, über einen 2-Zeiler diese Ansicht zu konfigurieren.
Diese Funktion muss vor der eigentlichen Verwendung in die Codeunit 423 eingebunden werden oder in einer nach Ihrer Wahl.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
PROCEDURE ShowLogEntries(RecRef : RecordRef); VAR ChangeLogEntry : Record 405; KeyRef1 : KeyRef; KeyFldRef : FieldRef; i : Integer; IndexFields : Text[1024]; Text001 : TextConst 'DEU=Keine Änderungsprotokollposten zu %1 (%2) gefunden.;ENU=No Change Log Entries were found on %1 (%2).'; BEGIN ChangeLogEntry.SETRANGE("Table No.",RecRef.NUMBER); KeyRef1 := RecRef.KEYINDEX(1); FOR i := 1 TO KeyRef1.FIELDCOUNT DO BEGIN KeyFldRef := KeyRef1.FIELDINDEX(i); CASE i OF 1: BEGIN ChangeLogEntry.SETRANGE("Primary Key Field 1 Value",FormatValue(KeyFldRef,RecRef.NUMBER)); IndexFields := STRSUBSTNO('%1 = %2', KeyFldRef.CAPTION, FormatValue(KeyFldRef,RecRef.NUMBER)); END; 2: BEGIN ChangeLogEntry.SETRANGE("Primary Key Field 2 Value",FormatValue(KeyFldRef,RecRef.NUMBER)); IndexFields := STRSUBSTNO(IndexFields+', %1 = %2', KeyFldRef.CAPTION, FormatValue(KeyFldRef,RecRef.NUMBER)); END; 3: BEGIN ChangeLogEntry.SETRANGE("Primary Key Field 3 Value",FormatValue(KeyFldRef,RecRef.NUMBER)); IndexFields := STRSUBSTNO(IndexFields+', %1 = %2', KeyFldRef.CAPTION, FormatValue(KeyFldRef,RecRef.NUMBER)); END; END; END; IF ChangeLogEntry.FINDFIRST THEN BEGIN FORM.RUN(FORM::"Change Log Entries",ChangeLogEntry); END ELSE MESSAGE(Text001 , RecRef.CAPTION , IndexFields ); END; |
Nochfolgend kann diese zentrale Funktion wie unten dargestellt verwendet werden:
1 2 3 4 5 6 7 8 |
PROCEDURE ShowChangeLog(); VAR RecRef : RecordRef; ChangeLogMgmt : Codeunit 423; BEGIN RecRef.GETTABLE(Rec); ChangeLogMgmt.ShowLogEntries(RecRef); END; |