Lösungs-Tipp: Automatische Updates mit FileMaker

Anleitung: Updatefunktion mit FileMakerRapid Engineering ist der große Vorteil von FileMaker-Datenbanken, was in der Praxis dazu führt, daß FileMaker-Datenbanken meist „leben“ und stetig erweitert werden. Aus verschiedenen Gründen ist es dabei nicht empfehlenswert, in Echtzeit an der laufenden Datenbank Änderungen vorzunehmen. Sicherer ist eine Testumgebung mit einer separaten Entwicklerversion, mit der die Produktivversion von Zeit zu Zeit aktualisiert wird. Bei diesem Vorgang müssen alle Datentabellen aus der laufenden Version exportiert und nach Ersetzen der FileMaker-Datenbanken wieder importiert werden, sofern Daten und Struktur nicht penibel getrennt wurden. Um nicht bei jedem Update manuell alle Daten exportieren und wieder importieren zu müssen, läßt sich z.B. mit Hilfe des Base Elements Plugins eine Routine entwickeln, die diesen Vorgang automatisiert ausführt. In diesem Artikel zeigen wir, wie es geht und wie der Umgang mit FileMaker- und Systempfaden zum Kinderspiel wird. Am Ende des Artikels kann die Beispieldatei heruntergeladen werden. Das Archiv enthält eine Beispieldatei im FileMaker-12-Format.

Zwei kostenlose Plugins benötigt

Die beschriebene Lösung nutzt Funktionen des kostenlos erhältlichen Base Elements Plugins, das unter FileMaker 11 und 12 lauffähig ist. Das Base Elements Plugin kann auf der Website des Herstellers Goya Pty Ltd. kostenlos heruntergeladen werden und steht für Mac OS X und Windows als 32-bit oder 64-bit-Version zum Download zur Verfügung.

Für die Dateiauswahlbox ist das ebenfalls kostenlos verfügbare Dialog-Plugin erforderlich. Das Dialog-Plugin unterstützt eine Vielzahl an Dialogen und Eingabemöglichkeiten, ist für Mac OS X und Windows verfügbar und kann hier heruntergeladen werden.

Hilfreiche Custom Functions

Um mit Pfaden einfacher umgehen zu können, beinhaltet die Beispiellösung insgesamt sieben eigene Funktionen (Custom Functions). Diese können mit FileMaker Pro Advanced eingesehen werden und stehen als verwendbare Funktionen auch unter FileMaker Pro zur Verfügung. Die beiden Custom Functions, die in der Praxis von uns genutzt werden, heißen:

PathPluginToFM ( Pfad ) – wandelt einen nativen Systempfad in einen FileMaker-Pfad um. Die Funktion steht auf Windows- und Mac-Clients zur Verfügung.

PathFMToPlugin ( Pfad ) – wandelt einen FileMaker-Pfad in einen nativen Systempfad um. Die Funktion steht auf Windows- und Mac-Clients zur Verfügung und kann z.B. für das ebenfalls kostenlos erhältliche Dialog Plugin verwendet werden, um bei einer Dateiauswahlbox Pfade vorzugeben.

Die anderen fünf Custom Functions sind Teilfunktionen und werden von den beiden genannten Custom Functions intern verwendet.

Setzen eines Speicherpfades

Unsere Beispieldatei enthält insgesamt drei Tabellen: Updatefunktion, Tabelle 1 und Tabelle 2. So simuliert die Beispieldatei eine FileMaker-Lösung, in der mehrere Tabellen per Export und Import upgedatet werden können. Damit FileMaker weiß, wohin die Datenbanken gespeichert werden sollen, muß zunächst ein Speicherpfad gesetzt werden. Dies erfolgt mit der Schaltfläche […] vor dem Feld für den Pfad, die das Script „sf.Pfadauswahl“ aufruft. Dieses Script ruft lediglich eine Dateiauswahlbox mit Hilfe des Dialog Plugins auf:

Variable setzen [$pfad; Wert:Dialog_SelectFolderDialog (""; "Systempfad wählen...";
PathFMToPlugin (Hole (DokumentenPfad)))]

Der ausgewählte Pfad wird in die Variable $pfad geschrieben. Als Standard-Pfad (bei dem der Auswahldialog beginnen soll) wurde in diesem Beispiel das Dokumentverzeichnis des aktuellen Benutzers angegeben. Da das Dialog-Plugin native Pfade und keine FileMaker-Pfade annimmt, wird der Pfad Hole(DokumentenPfad) mit der Funktion PathFMToPlugin () in einen nativen Pfad gewandelt. Wenn der Benutzer einen Pfad angegeben und auf [Auswählen] geklickt hat, wird der Pfad mit der Funktion

Feldwert setzen [Updatefunktion::Dateipfad; $pfad]

in das Feld <<Updatefunktion::Dateipfad>> geschrieben. Damit verfügt die Lösung nun über einen gültigen Dateipfad, in das die Datenbanken für das Update geschrieben werden können.

Export aller Tabellen in externe Datenbanken

Da die Lösung nun über einen gültigen Pfad für den Export verfügt, können nun alle Tabellen in externe Datenbanken exportiert werden. Der Export einer Datentabelle erfolgt über vier Scriptzeilen:

Variable setzen [$pfad; Wert:PathPluginToFM (Updatefunktion::Dateipfad) & "/Updatefunktion.fmp12]

Mit diesem Befehl wird der in der Tabelle Updatefunktion gespeicherte Dateipfad FileMaker-kompatibel in die Variable $pfad geschrieben.

Gehe zu Layout ["Updatefunktion" (Updatefunktion)]

Wechseln in das Layout, aus dem die Datensätze exportiert werden sollen

Alle Datensätze anzeigen

Da im Export alle Datensätze exportiert werden sollen, ruft dieser Befehl in der Zieltabelle alle Datensätze auf. Für spezielle Exporte kann an dieser Stelle auch eine andere Selektion von Datensätzen durchgeführt werden.

Datensätze exportieren [Ohne Dialogfeld; "$pfad"; Unicode (UTF-16)]

Mit diesem Befehl werden die Datensätze aus der Tabelle des aufgerufenen Layouts in die in $pfad angegebene externe Datei exportiert. Als Dateiformat wurde in unserem Beispiel FileMaker (.fmp12) angegeben. Wichtig ist an dieser Stelle, auch die zu verwendende Feldfolge anzugeben, in der die Daten exportiert werden sollen:

Feldfolge für Datenexport

Diese vier Befehle werden nun einfach für jede in der Datenbank befindliche Tabelle wiederholt. Dabei wird jeweils der Dateiname für die Variable $pfad, das aufzurufende Layout sowie die Feldfolge für den Export an jede Tabelle angepaßt.

Exportscript für Updatefunktion

Am Ende enthält das Script für den vollständigen Datenexport die oben erläuterten vier Befehlszeilen für jede Tabelle, die im Rahmen der Updatefunktion exportiert werden soll.

Durchführen des Datenexportes für das Importscript

In Ihrer Lösung sollten Sie nun das Script für den Datenexport einmal durchführen – nicht nur zu Testzwecken, sondern Sie benötigen die exportierten Dateien auch, um das Script für die Importe erstellen zu können. Wenn Ihr Exportscript fehlerfrei ist, sollten sich nun alle Dateien im gewählten Verzeichnis befinden.

Automatisierter Import aller exportierten Datenbanken

Im letzten Schritt gilt es, die Daten aus den exportierten Datenbanken automatisiert wieder in die Lösung zu importieren. Dafür enthält die Beispiellösung das Script „ts.Update_Import“, das folgendermaßen aufgebaut ist:

Variable setzen [$updatepfad; Wert:Updatefunktion::Dateipfad]

Mit diesem Befehl wird der im Feld <<Updatefunktion::Dateipfad>> gespeicherte Pfad in die Variable $updatepfad geschrieben. Diese Zuweisung muß nur einmal in diesem Script erfolgen. Alle weiteren Befehle werden so oft wiederholt, wie Tabellen importiert werden sollen.

Variable setzen [$pfad; Wert:PathPluginToFM ($updatepfad) & "/Updatefunktion.fmp12"]

Der Variablen $pfad wird mit diesem Befehl der zuvor in $updatepfad gespeicherte Pfad sowie der Dateiname der exportierten Datenbank zugewiesen und das Ganze mit der Funktion „PathPluginToFM“ in einen gültigen FileMaker-Pfad konvertiert.

Gehe zu Layout ["Updatefunktion" (Updatefunktion)]

Wechseln in das Layout, in das die Datensätze importiert werden sollen

Alle Datensätze anzeigen
Alle Datensätze löschen [Ohne Dialogfeld]

Falls sich in der Tabelle noch alte Datensätze befinden sollen, werden sie mit diesen beiden Befehlen vor dem Import aus der Datentabelle gelöscht.

Datensätze importieren [Ohne Dialogfeld; "$pfad"; Hinzufügen; Mac Roman]

Mit diesem Befehl werden die Datensätze in die Tabelle des aufgerufenen Layouts (hier: „Updatefunktion“) importiert.

Der Trick mit der Feldfolge

Beim Entwickeln dieses Scriptes kann der Importbefehl jedoch nicht einfach so hingeschrieben werden, denn wenn als Dateiname eine Variable angegeben wurde, läßt sich die Feldreihenfolge für den Import nicht festlegen. Aus diesem Grund müssen Sie zunächst als Dateinamen zusätzlich die im vorherigen Schritt exportierte Datenbankdatei angeben. Doppelklicken Sie hierfür den Befehl [Datensätze importieren…] und klicken Sie auf die Schaltfläche [Datei hinzufügen…]. Wählen Sie nun die im vorherigen Schritt exportierte passende Datenbankdatei aus:

Datei beim Datenimport angeben

Nachdem Sie den Dialog mit [OK] bestätigt haben, können Sie nun unter [Importfolge angeben] die Feldreihenfolge angeben, in der die Datenbanken importiert werden sollen.

Feldreihenfolge beim Datenimport

Unter [Quelle] sehen Sie die Datentabelle der zuvor exportierten Datenbank. Wählen Sie im Popupmenü [Ziel] die passende Zieltabelle aus, in die die Daten aus der externen Datentabelle importiert werden sollen und passen ggf. die Feldreihenfolge an. Legen Sie nach Klick auf [OK] fest, ob automatische Eingabeoptionen durchgeführt werden sollen und klicken Sie auf [Importieren], um die Importoptionen zu speichern.

Klicken Sie nun wieder auf [Datei…] unter Datenquelle angeben oder doppelklicken Sie den Scriptbefehl Datensätze importieren. Entfernen Sie nun wieder die Zeile file:Dateiname.fmp12, so daß im Eingabefeld unter Pfadliste nur noch $pfad steht.

Um weitere Tabellen automatisch zu importieren, wiederholen Sie den Vorgang für jede Datentabelle. Am Ende sieht das Importscript so aus wie in unserer Beispiellösung:

Script für Datenimport

Damit ist die Funktion für eine automatisierte Datenübernahme bei Updates fertiggestellt. In der Beispiellösung wurden die beiden Scripte auf zwei Schaltflächen [Update: Export] und [Update: Import] gelegt. Mit der Schaltfläche [FileMaker-Pfad] wird demonstriert, wie die Custom Function PathPluginToFM (Pfad) einen Systempfad in einen FileMaker-Pfad umwandelt.

FileMaker Beispiellösung

Download Beispieldatei für FileMaker 12

Download FileMaker Beispieldatei

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.

Diesen Beitrag bewerten:

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Bisher noch keine Bewertungen vorhanden)
Loading...

Über den Autor

Markus Schall
Entwicklung von FileMaker-Datenbanken seit 1994, Modifikation und Erweiterung von FileMaker-Lösungen, Konvertierung von FileMaker-Datenbanken von .fm, .fp3, .fp5 (FileMaker 2-6) oder .fp7 (FileMaker 7-11) zu .fmp12 (FileMaker 12-15), Schnittstellen zu Drittsystemen wie Onlineshops, CMS oder andere Datenbanken. Entwicklung individueller FileMaker-Datenbanksysteme auf Basis des gFM-Business-Frameworks mit persönlicher Beratung aus Oldenburg. Betreiber des Online-Fachportals goFileMaker.de, Entwickler des CRM- und Warenwirtschaftssystems gFM-Business. Mitglied in der FileMaker Business Alliance, FileMaker Developers Subscription und FMM Experte. Gewinner eines FMM Award 2011, vergeben durch das FileMaker Magazin.

2 Kommentare

  1. Felix Mühlberg

    Hallo Markus,

    wäre es nicht einfacher, Form, Inhalt und Funktion von einander zu trennen? So können bis auf die Inhalts-DB alle Dateien problemlos mit einem beliebigen Install-update-Programm ersetzt werden. Ein Script mit Admin-Rechten könnte außerdem die Felder in den Inhalts-DB manipulieren.
    Die Variante oben habe ich auch einmal durch-dekliniert. Da konnte man noch pro DB nur eine Tabelle speichern!
    Heute würde ich das so programmieren:
    1. DB für Funktionen
    2. DB Layouts
    3. DB Struktur/Relas
    4. DB Inhalt

    Das ist übersichtlich und sehr simpel zu updaten.

    1. Markus Schall (Beitrag Autor)

      Hallo Felix,

      in welcher Struktur eine Datenbank entwickelt wird, bleibt ja jedem selbst überlassen. In diesem Artikel wird nur gezeigt, wie Dateninhalte von Tabellen in einem Rutsch importiert werden können.

      Viele Grüße!

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.