Aufzeichnen von Ereignissen in FileMaker-Datenbanken.


Ereignisse in FileMaker automatisch aufzeichnenWer kennt das nicht: Ein Datensatz ist nicht mehr vorhanden oder wurde geändert, aber niemand will es gewesen sein. Besonders ärgerlich ist so etwas vor allem dann, wenn nicht mehr bekannt ist, welche Werte vorher in den Feldern gestanden haben. Wenn existent, hilft in solchen Fällen noch ein Backup, allerdings erweist sich die Rücksicherung eines Backups meist als recht zeitintensiv.

Deutlich einfacher lassen sich solche Probleme behandeln, wenn die Änderung eines Feldwertes direkt aufgezeichnet (oder neudeutsch: “getrackt”) wird. In früheren FileMaker-Versionen konnte so etwas z.B. unter Verwendung von Eingabedialogen realisiert werden, indem nach Klick auf die [OK]-Schaltfläche ein Script zur Aufzeichnung des Vorgangs aufgerufen wurde. Mit den neueren FileMaker-Versionen ist das Ganze dank Script-Trigger deutlich einfacher geworden. Wie es geht, zeigt dieser Artikel mit entsprechender Beispieldatei.

Die Vorteile der Aufzeichnung von Ereignissen

Kundenbezogenes EreignisprotokollWerden Feldereignisse und Routinen in FileMaker-Datenbanken konsequent aufgezeichnet, ergeben sich im laufenden Betrieb handfeste Vorteile. Bei jeder Änderung wird das Ereignis in einem Protokoll aufgezeichnet, das als gesamtes Protokoll oder auch verknüpft mit einer anderen Datenbank angezeigt werden kann. So können beispielsweise alle kundenbezogenen Ereignisse in einem Layout angezeigt werden, und man erhält einen Überblick über alle Ereignisse, die im Zusammenhang mit dem aufgerufenen Kunden vorgenommen wurden. Die Tabelle für das Ereignisprotokoll enthält neben Standardangaben wie Datum, Benutzername, Tabelle oder Primärschlüssel bei Feldänderungen auch die tatsächlichen Feldwerte vor und nach der vorgenommenen Änderung. Dies ermöglicht weitere Funktionen wie beispielsweise die Wiederherstellung (unbegrenztes Undo in beliebiger Reihenfolge) von geänderten Daten – entfernt vielleicht vergleichbar wie “Visual Voicemail für Daten” ;-)

Auf ans Werk: Was wird benötigt?

Ein Ereignisprotokoll auch für eine bereits bestehende FileMaker-Lösung zu entwickeln, ist mit überschaubaren Mitteln realisierbar. Benötigt wird dafür zunächst eine neue Tabelle, die alle relevanten Felder für die Verwaltung von Ereignissen enthält. In der Beispieldatei trägt die Tabelle den Namen “Ereignisprotokoll”.

Feldbeschreibung Ereignisprotokoll

Jedes aufgezeichnete Ereignis entspricht einem Datensatz in dieser Tabelle, der automatische Primärschlüssel heißt _pk_Ereignis_ID. In das Schlüsselfeld _fk_Fremdschlüssel wird der Bezugsschlüssel gespeichert, auf den sich das Ereignis bezieht. Wird also beispielsweise ein Feld in einer Kundendatenbank geändert, wird dieses Feld mit dem Primärschlüssel der Kundendatenbank gefüllt. Welcher Schlüssel sich in diesem Feld befindet, wird in das Feld Fremdschlüssel geschrieben.

Für Feldänderungen befinden sich in dieser Tabelle außerdem die Felder Feldinhalt_vorher und Feldinhalt_nachher, die den Feldinhalt jeweils vor und nach der durchgeführten Änderung beinhalten.

Zwei Scripte genügen.

Um ein Ereignis aufzuzeichnen, sind neben der Tabelle nun noch zwei Scripte erforderlich: Ein Script dient für den reinen Eintrag in die Tabelle Ereignisprotokoll und ist mit Script-Parameter aufzurufen, und ein weiteres Script wird für die Aufzeichnung von Feldänderungen benötigt, das per Script-Trigger am jeweiligen Feld aufgerufen wird.

Eintragen eines Ereignisses

Schauen wir uns zunächst das reine Eintragsscript [ts.Ereignisprotokoll] an, das folgende Script-Parameter annimmt:

  • Fremdschlüssel
  • Datei
  • Ursprung (Script/Feld, usw.)
  • Status (OK, Fehler)
  • Tabelle
  • Text
  • Vorgangsart
  • Fremdschlüssel-Art
  • Feldinhalt vorher
  • Feldinhalt nachher

Das Script selbst ist einfach strukturiert, schreibt die im Script-Parameter enthaltenen Werte zunächst in Variablen und dann in einen neuen Datensatz der Tabelle Ereignisprotokoll.

Ereignisprotokoll: Script 1

Dieses Script kann von jedem beliebigen anderen Script aufgerufen werden, das Einträge im Ereignisprotokoll vornehmen soll. In der Beispiellösung wurde außerdem die Aufzeichnung von Feldereignissen realisiert, die dieses Script ebenfalls aufruft.

Script [ts.Feldereignis_aufzeichnen]

Das Script ts.Feldereignis_aufzeichnen wird bei jedem Feld als Script-Trigger [BeiObjektBetreten] und [BeiObjektVerlassen] gesetzt. Es kann als optionalen Script-Parameter einen Reiter eines Registersteuerelements annehmen, falls sich das Feld in einem Bereich eines Registersteuerelementes befinden sollte. Dies ist erforderlich, damit das Script nach Anlage des Protokoll-Datensatzes in das korrekte Registersteuerelement auf dem Ziel-Layout wechseln kann.

Das Script prüft zunächst ob die Systemvariable $$feld gefüllt ist oder leer. Ist diese Systemvariable leer, hat der Benutzer ein Feld betreten, und das Script füllt die Systemvariable $$feld mit dem aktiven Feldnamen und $$feldinhalt_vorher mit dem Feldinhalt vor der Änderung. Danach wird das Script bereits verlassen, denn mehr muß das Script bei Betreten eines Feldes nicht tun.

Wenn die Systemvariable $$feld bereits gefüllt ist, hat der Benutzer möglicherweise den Feldinhalt geändert und verläßt gerade das Feld. Das Script prüft nun, ob der Feldinhalt verändert wurde und legt im Fall einer Veränderung einen Datensatz im Ereignisprotokoll an durch Aufruf des Teilscriptes ts.Ereignisprotokoll. Wenn sich das Feld in einem Registersteuerelement befindet und als Script-Parameter der Name des Reiters mitgeliefert wurde, wechselt das Script nun in den angegebenen Reiter, da nach der Eintragung sonst auf das standardmäßig angegebene Registersteuerelement gewechselt würde. Am Schluß löscht das Script wieder die Variablen $reiter, $$feld, $$feldinhalt_vorher und $$feldinhalt_nachher, und das Spiel kann wieder von vorne beginnen, denn die Systemvariable $$feld ist nun wieder leer.

Ereignisprotokoll: Feldereignis aufzeichnen

Felder mit Script-Triggern belegen

Im letzten Schritt müssen nun noch die gewünschten Felder mit Script-Triggern versehen werden, damit die Eintragung in das Ereignisprotokoll bei einer Feldänderung stattfinden kann. Pro Feld müssen zwei Script-Trigger eingerichtet werden, die jeweils das gleiche Script aufrufen:

Script-Trigger für Feldwertaufzeichnung und Ereignisprotokoll

  • BeiObjektBetreten ["ts.Feldereignis_aufzeichnen"; {Parameter: "Reiter"}]
  • BeiObjektVerlassen ["ts.Feldereignis_aufzeichnen"; {Parameter: "Reiter"}]

Der Script-Parameter “Reiter” ist optional und wird nur angegeben, wenn sich das Feld, wie in der Beispieldatei, in einem Registersteuerelement befindet. Dabei wird der Name des Reiters angegeben, der im Inspektor unter dem Reiter [Position] im Feld Name angegeben werden muß.

Beispieldatei zur Feldwertaufzeichnung

Am Ende dieses Artikels können Sie eine Beispieldatei für FileMaker 12 herunterladen, in der das Ereignisprotokoll mit Feldwertaufzeichnung realisiert wurde. Sie können diese Beispieldatei als Basis für eine eigene Datenbank verwenden oder um die Funktionen in Ihre eigene FileMaker-Lösung zu übertragen.

Ereignisliste in der Beispieldatei

Download Beispieldatei für FileMaker 12

Laden Sie hier die Beispieldatei [Ereignisprotokoll.fmp12.zip] herunter.

So übernehmen Sie Scripte aus der Beispieldatei in Ihre Lösung

Scripte lassen sich einfach über die Zwischenablage von einer FileMaker-Lösung in eine andere Lösung übertragen. Öffnen Sie einfach den Dialog Scripts verwalten, markieren Sie das gewünschte Script mit der Maus und kopieren Sie das Script in die Zwischenablage per Menü [Bearbeiten - Kopieren] oder Tastenkombination [Strg/Cmd-C]. Öffnen Sie daraufhin in der Ziel-Lösung den gleichen Dialog und fügen das zuvor kopierte Script einfach per Menübefehl [Bearbeiten - Einfügen] wieder ein.

So übernehmen Sie Tabellen aus der Beispieldatei in Ihre Lösung

Tabellen können auf mehrere Arten in eine bestehende Lösung eingefügt werden. Der einfachste Weg ist der Import der Tabelle über die Schaltfläche [Importieren...] im Dialog Datenbank verwalten. In einem nachfolgenden Dialog können dann alle Tabellen ausgewählt werden, die aus der Quell-Lösung importiert werden sollen. Diese Methode eignet sich also besonders, wenn mehrere Tabellen gleichzeitig importiert werden sollen. Soll nur eine Tabelle importiert werden, kann dies wie ein Script auch über die Zwischenablage erfolgen. Soll eine Tabelle samt Daten importiert werden, kann dies mit dem Befehl [Ablage/Datei > Datensätze importieren > Datei] erfolgen. Im Import-Dialog muß dann als Zieltabelle Neue Tabelle angegeben werden.

So übernehmen Sie Wertelisten aus der Beispieldatei in Ihre Lösung

Wertelisten können einfach über die Zwischenablage von einer FileMaker-Lösung in eine andere Lösung importiert werden. Öffnen Sie einfach den Dialog unter [Ablage/Datei > Verwalten > Wertelisten], markieren Sie die gewünschte Werteliste mit der Maus und kopieren Sie die Werteliste in die Zwischenablage per Menü [Bearbeiten - Kopieren] oder Tastenkombination [Strg/Cmd-C]. Öffnen Sie daraufhin in der Ziel-Lösung den gleichen Dialog und fügen die zuvor kopierte Werteliste per Menübefehl [Bearbeiten - Einfügen] wieder ein.

So übernehmen Sie eigene Funktionen aus der Beispieldatei in Ihre Lösung

Klicken Sie im Dialog [Ablage/Datei > Verwalten > Eigene Funktionen...] auf die Schaltfläche [Importieren] und wählen daraufhin die Beispieldatei aus. Wählen Sie im nachfolgenden Dialog die gewünschten eigenen Funktionen aus und bestätigen den Dialog. Bitte beachten Sie, daß diese Funktion nur in FileMaker Pro Advanced, nicht jedoch in FileMaker Pro zur Verfügung steht.

The following two tabs change content below.
Markus Schall
Entwicklung von FileMaker-Datenbanken seit 1994, Modifikation, und Erweiterung bestehender FileMaker-Lösungen, Konvertierung von FileMaker-Datenbanken in .fp7 (FileMaker 7-11) oder .fmp12 (FileMaker 12 und FileMaker 13), Schnittstellen zu Drittsystemen wie Onlineshops, Content-Management-Systeme oder andere Datenbanken. Entwicklung individueller FileMaker-Datenbanksysteme auf Basis der gFM-Business-Technologie mit persönlicher Beratung aus Oldenburg. Betreiber des Online-Fachportals goFileMaker.de, Entwickler des CRM- und Warenwirtschaftssystems gFM-Business, das unter Mac OS X, Windows und auf dem Apple iPad lauffähig ist. Mitglied in der FileMaker Business Alliance, FileMaker Developers Subscription und FMM Experte.

, , , , ,

  1. Bisher keine Kommentare.
(wird nicht veröffentlicht)