Datenbankgesteuerte Navigation in FileMaker (Go)

Datenbankgesteuerte Benutzeroberfläche in FileMaker (Go)-DatenbankenDie Navigation wird heutzutage in den meisten Lösungen noch auf statische Weise realisiert, d.h. es werden statische Schaltflächen mit entsprechender Beschriftung auf dem Layout eingefügt und mit einer Taste belegt. Diese Vorgehensweise hat den Nachteil, daß bei Erweiterungen oder Änderungen die entsprechende Taste meist auf mehreren Layouts hinzugefügt oder entfernt werden muß und ist aus diesem Grund relativ fehleranfällig. Auch mehrsprachige Lösungen lassen sich auf diese Weise nur sehr umständlich realisieren. Mit einer Datenbankgesteuerten Navigation in einer FileMaker-Lösung kann man den genannten Problemen auf elegante Weise entgehen. Eine solche Navigation hat den Vorteil, daß sich auf jedem Layout immer die gleichen Navigationselemente befinden und daß beispielsweise auch eine Mehrsprachenfähigkeit problemlos realisierbar ist. Im Prinzip läßt sich eine datenbankgesteuerte Navigation in FileMaker auf unterschiedlichen Wegen realisieren. In diesem Artikel zeige ich einen einfachen Weg, wie eine datenbankgesteuerte Navigation in einer FileMaker-Datenbank implementiert werden kann. Am Ende des Artikels kann die erörterte Datenbankdatei im FP7- und FMP12-Format für FileMaker 9-11 sowie FileMaker 12 kostenlos heruntergeladen werden.

Grundüberlegungen: Was soll die Navigation können?

Zunächst sollte man sich über die Ziele bewußt sein, was die Navigation im Einzelnen können und wie sie aufgebaut sein soll. Für meine Beispieldatei habe ich folgende Anforderungen definiert:

  • Grafische Menüschaltflächen mit austauschbaren Grafiken
  • Individuelle Beschriftungen pro Navigationsschaltfläche (optional mehrsprachig)
  • Navigation auf zwei Ebenen
  • Einfache Administration der Navigation für alle Layouts
  • Lauffähig ohne Plugin und unter FileMaker Go für iPad und iPhone

Die in diesem Beispiel gezeigte Navigationslösung funktioniert ohne Anpassungen nicht, wenn die Benutzeroberfläche in mehreren Fenstern laufen soll, da der aktuelle Layoutname in einem globalen Feld gespeichert wird. Diese Problematik ließe sich relativ einfach mit einem Fenstermanagement lösen – da ich in meinem Beispiel jedoch eine möglichst einfache Navigationslösung zeigen möchte, habe ich diese Option nicht integriert.

Stammdatentabelle mit globalen Feldern

Damit wir die grafischen Elemente und Beschriftungen in den Layouts anzeigen können, müssen wir die entsprechenden Felder in einer zentralen Tabelle ablegen. In unserer Beispieldatei befinden sich die entsprechenden Felder in der Tabelle <<Stammdaten>>. Für die grafischen Elemente werden Medienfelder verwendet, für die Beschriftungen Textfelder. Damit die Feldinhalte später auch im Suchen-Modus angezeigt werden können, müssen alle relevanten Felder in der Tabelle <<Stammdaten>> als globale Felder definiert werden. Für die grafischen Elemente der Navigation wurden in der Lösung folgende globale Felder angelegt:

  • skn_taste_aktiv (aktive Taste)
  • skn_taste_inaktiv (inaktive Taste)

Für die Tastenbeschriftungen wurden folgende globale Felder angelegt:

  • txt_z1s1 (Beschriftung für Navigationstaste, Zeile 1, Spalte 1)
  • txt_z1s2 (Beschriftung für Navigationstaste, Zeile 1, Spalte 2)
  • txt_z1s3 (Beschriftung für Navigationstaste, Zeile 1, Spalte 3)
  • txt_z1s4 (Beschriftung für Navigationstaste, Zeile 1, Spalte 4)
  • txt_z1s5 (Beschriftung für Navigationstaste, Zeile 1, Spalte 5)
  • txt_z1s6 (Beschriftung für Navigationstaste, Zeile 1, Spalte 6)
  • txt_z1s7 (Beschriftung für Navigationstaste, Zeile 1, Spalte 7)
  • txt_z1s8 (Beschriftung für Navigationstaste, Zeile 1, Spalte 8)

Für die zweite Ebene (Zeile) wurden die Felder txt_z2s1 bis txt_z2s8 angelegt. Für die Navigation werden außerdem Felder für Script-Parameter benötigt, die in der Navigation individuell anpaßbar sind. Auch bei diesen Feldern handelt es sich in der Tabelle <<Stammdaten>> um globale Felder:

  • par_z1s1 (Script-Parameter für Navigationsfeld Zeile 1, Spalte 1)
  • par_z1s2 (Script-Parameter für Navigationsfeld Zeile 1, Spalte 2)
  • par_z1s3 (Script-Parameter für Navigationsfeld Zeile 1, Spalte 3)
  • par_z1s4 (Script-Parameter für Navigationsfeld Zeile 1, Spalte 4)
  • par_z1s5 (Script-Parameter für Navigationsfeld Zeile 1, Spalte 5)
  • par_z1s6 (Script-Parameter für Navigationsfeld Zeile 1, Spalte 6)
  • par_z1s7 (Script-Parameter für Navigationsfeld Zeile 1, Spalte 7)
  • par_z1s8 (Script-Parameter für Navigationsfeld Zeile 1, Spalte 8)

Für die zweite Ebene (Zeile) wurden die Felder par_z2s1 bis par_z2s8 angelegt. In der Tabelle <<Stammdaten>> befindet sich außerdem das globale Feld <<_sys_Akt_Layout>>, in das das jeweils aktuelle Layout geschrieben wird, das globale Schlüsselfeld <<_sGlobal>> (enthält „1“) sowie einige weitere grafische Elemente für die Anzeige auf FileMaker-Layouts.

GUI-Tabelle für die Steuerung der Navigation

In einer weiteren Tabelle namens <<gui>> werden alle Layouts gespeichert mit entsprechenden Beschriftungen und Parametern. Als Primärschlüssel wird in dieser Tabelle der Layoutname verwendet. Im Gegensatz zur Tabelle <<Stammdaten>> werden die Felder in dieser Tabelle nicht als globale Felder, sondern als normale Text- und Medienfelder angelegt. Für die Beschriftung wurden folgende Felder angelegt:

  • txt_z1s1 (Beschriftung für Navigationsfeld, Zeile 1, Spalte 1)
  • txt_z1s2 (Beschriftung für Navigationsfeld, Zeile 1, Spalte 2)
  • txt_z1s3 (Beschriftung für Navigationsfeld, Zeile 1, Spalte 3)
  • txt_z1s4 (Beschriftung für Navigationsfeld, Zeile 1, Spalte 4)
  • txt_z1s5 (Beschriftung für Navigationsfeld, Zeile 1, Spalte 5)
  • txt_z1s6 (Beschriftung für Navigationsfeld, Zeile 1, Spalte 6)
  • txt_z1s7 (Beschriftung für Navigationsfeld, Zeile 1, Spalte 7)
  • txt_z1s8 (Beschriftung für Navigationsfeld, Zeile 1, Spalte 8)

Für die zweite Menüebene wurden die Felder txt_z2s1 bis txt_z2s8 angelegt. Analog dazu gibt es die Felder

  • <<par_z1s1>> bis <<par_z1s8>> und <<par_z2s1>> bis <<par_z2s8>> für Script-Parameter und
  • <<akt_z1s1>> bis <<akt_z1s8>> und <<akt_z2s1>> bis <<akt_z2s8>>

als Flag, ob das jeweilige Feld aktiv ist oder nicht (enthält bei Aktivität 1 und ist ansonsten leer). Die Tabelle <<gui>> enthält als Primärschlüssel das Feld <<_Layoutname>> und einen globalen Schlüssel <<_sGlobal>>.

Verknüpfung der GUI-Tabelle mit den Stammdaten

Als Nächstes muß die GUI-Tabelle mit den Stammdaten verknüpft werden. Hierbei ist zu berücksichtigen, daß es zwei Verknüpfungen zur Tabelle <<gui>> gibt:

  • gui (<<Stammdaten::_sys_Akt_Layout>> = <<gui::_Layoutname>>)
  • glo_gui (<<Stammdaten::_sGlobal>> = <<gui::_sGlobal>>)

Die erste Verknüpfung „gui“ wird für die Funktion der Navigation benötigt. Hierbei enthält das globale Feld <<Stammdaten::_sys_Akt_Layout>> den Namen des aktuellen Layouts und das Feld <<gui::_Layoutname>> den Layoutnamen in der GUI-Datenbank. Die zweite Verknüpfung erfolgt global für die Anzeige des Administrationslayouts mit dem TO = Stammdaten.

Jede Datentabelle der FileMaker-Lösung muß über das Feld <<_sGlobal>> verfügen und über dieses Feld global mit der Tabelle <<Stammdaten>> verknüpft sein. In unserem Beispiel ist dies die Tabelle <<Datentabelle>>.

GFM_GUI_Beziehungsgraph

Teilscript für den Aufbau der Navigationsbezogenen Felder

Sie erinnern sich, daß wir in der Tabelle <<Stammdaten>> einige globale Felder angelegt haben, die für jede Schaltfläche ein grafisches Element und eine Textbeschriftung enthalten. Der Inhalt, der in diese Felder geschrieben wird, stammt aus der Tabelle <<gui>> für jedes einzelne Layout. Das Teilscript ts.GUI_Menüaufbau kümmert sich bei einem Klick auf eine Schaltfläche um die Übertragung der Daten aus der Tabelle <<gui>> in die globalen Felder der Tabelle <<Stammdaten>>.

Im ersten Schritt wird der Fenstermodus ausgelesen, denn um die Daten übertragen zu können, muß sich die Datenbank im Blättern-Modus befinden. Deshalb wird zunächst geprüft, in welchem Modus sich die Datenbank derzeit befindet:

Variable setzen [$fenstermodus; Wert:Hole ( Fenstermodus )]
Wenn [fenstermodus = 1]
   Blätternmodus aktivieren
Ende (wenn)

Daraufhin wird der Name des aktuell aufgerufenen Layouts in das globale Schlüsselfeld _sys_Akt_Layout der Tabelle „std“ geschrieben:

Feldwert setzen [std::_sys_Akt_Layout; Hole ( LayoutName )

Anschließend werden nun alle für die Navigation relevanten globalen Felder der Tabelle „std“ mit Werten gefüllt. Dies betrifft alle acht Schaltflächen der ersten und zweiten Zeile in der Navigationsleiste:

Medienfelder für Menütasten:

Feldwert setzen [std::nav_z1s1;
Wenn(IstLeer(gui::txt_z1s1); „“;
Wenn(
IstLeer(gui::akt_z1s1); std::iPad_taste_inaktiv;
std::iPad_taste_aktiv))]

Zeile 1, Spalte 1, jeweils 1 bis 8 mit Berücksichtigung, ob Menüpunkt aktiv ist oder nicht.

Beschriftungen für Menütasten:

Feldwert setzen [std::txt_z1s1; gui::txt_z1s1]

Zeile 1, Spalte 1, jeweils 1 bis 8

Scriptparameter für Menütasten:

Feldwert setzen [std::par_z1s1; gui::par_z1s1]

Zeile 1, Spalte 1, jeweils 1 bis 8

Im letzten Schritt kehrt das Script zur letzten Abfrage in den Suchmodus zurück, sollte das Script vom Suchenmodus aus aufgerufen worden sein.

lay.Navigation: Zentrales Script für die Navigation

Das Script „lay.Navigation“ ist das zentrale Script für die Navigation auf allen Layouts. In unserer kleinen Beispieldatenbank wurden an dieser Stelle bisher nur „normale“ Bildschirmlayouts verwendet, selbstverständlich kann das gleiche Prinzip auch beispielsweise mit Listen- oder Drucklayouts angewendet werden. Als Scriptparameter kommt in diesem Script der für das Layout angegebene Scriptparameter zum Einsatz, der in der ersten Zeile abgefragt wird.

Wenn [Hole(ScriptParameter) = "Scriptparameter aus der Layoutverwaltung"]
   Datei öffnen ["GFM_GUI"]
   Gehe zu Layout ["Layoutname"]
   Script ausführen ["ts.GUI_Menüaufbau"]
   Fenster aktualisieren [Join-Ergebnisse im Cache löschen]
Ende (wenn)

Darstellung der Navigation auf einem FileMaker-Layout

Im FileMaker-Layout kann die Navigation nun auf jedem Layout immer auf die gleiche Weise eingebunden werden, da sie vollständig aus Feldern aus der Tabelle „std“ besteht, deren globale Felder überall verfügbar sind und auch im Suchenmodus angezeigt werden können.

GFM_GUI_Feldbeschriftungen

Die angezeigten Texte in der Navigation entsprechen denen, die im Layout „Administration – Navigation“ für das entsprechende Layout eingetragen wurden:

GFM_GUI_Administration_Navigation

Das Layout zeigt ein Portal zur Tabelle „gui“, in der jedes Layout mit seinen zugehörigen Menüpunkten, Beschriftungen und Script-Parametern gespeichert ist. Soll ein neues Layout hinzugefügt werden, genügt ein Klick auf die [+]-Taste, um einen ungefähr passenden Datensatz zu duplizieren und die Kopie daraufhin anzupassen. Mit der [-]-Taste kann ein Layout aus der Navigation entfernt werden.

GFM_GUI_Administration_Grafik

Alle in dieser Maske gezeigten grafischen Elemente sind die globalen Felder aus der Tabelle „std“. Die Tabelle wurde um einige weitere Felder angereichert wie beispielsweise verschiedenfarbige Spaltenhintergründe, die in Portalen verwendet werden können.

Unter dem Menüpunkt „Administration – Grafik“ können alle Grafiken für die Benutzeroberfläche angepaßt werden. In der Beispieldatei sind die Grafiken als editierbare Fireworks-PNG-Dateien teils mit Verlaufspfaden gespeichert. Mit Klick auf die rechte Maustaste kann für jedes Medienfeld der Inhalt durch einen neuen Inhalt ausgetauscht werden.

Eingabemaske für die Beispieltabelle

GFM_GUI_Daten_Eingabe

Die Beispieldatei enthält eine Beispieltabelle und ein Beispielportal, die in der Navigation unter [Daten – Eingabe] angezeigt wird. Das Beispielportal enthält zu Anschauungszwecken Schaltflächen und einen Spaltenhintergrund aus der [std]-Tabelle. Mit den in [std] gespeicherten Spaltenhintergründen können für Portale auch bedingte Formatierungen mittels eines Formelfeldes vom Zieltyp „Medien“ realisiert werden.

Weiterentwicklung im Anker-Bojen-Modell

Die Beispieldatei, die am Ende dieses Artikels heruntergeladen werden kann, wurde teils für die Verwendung des Anker-Bojen-Modells optimiert. Für die Navigation selbst konnte es jedoch nicht konsequent umgesetzt werden, da die Beziehung „std“ immer den gleichen Namen haben muß. Die beispielhaften Daten- und Portaltabellen wurden jedoch nach dem Anker-Bojen-Modell umgesetzt, so daß der weitere Datenteil problemlos ebenso in diesem Modell realisiert werden kann.

Implementierung weiterer Funktionen

Auf der Basis der Beispieldatei können auf verhältnismäßig einfache Weise weitere Funktionen integriert werden. Ein fertiges System könnte beispielsweise über Layouts für alle Systeme, also Mac, Windows, iPad und iPhone enthalten und navigiert durch Skin-Fähigkeit jeweils auf Layouts, die optisch und vom Größenverhältnis her zum System passen. In wenigen Schritten läßt sich die Navigation auch mehrsprachig realisieren, die beliebig viele Übersetzungen zuläßt. Außerdem wäre beispielsweise eine Funktion denkbar, die sich aus jeder Oberkategorie die zuletzt aufgerufene Unterkategorie merkt und beim Zurückspringen zur ersten Hauptkategorie nicht das in der GUI-Dateibank festgelegte Layout ansteuert, sondern das vom Benutzer in dieser Oberkategorie zuletzt aufgerufene Layout. Wer weitere Ideen hat, darf diese natürlich gerne per Kommentar kundtun :-)

Download FileMaker Beispiellösung GFM_GUI

Im Folgenden können Sie die in diesem Artikel erläuterte Beispieldatei „GFM_GUI“ im FP7-Format für FileMaker 7-11 sowie im FMP12-Format für FileMaker 12 kostenlos herunterladen. Um den Download zu starten, bitten wir um eine Empfehlung auf Facebook, Google+ oder Twitter.

Dateiinformationen: ZIP-Archiv (697 kB)
Enthält: GFM_GUI.fp7 (1,6 MB), GFM_GUI.fmp12 (2,5 MB)

Download FileMaker Beispieldatei

Diesen Beitrag bewerten:

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (5 Stimmen, Durchschnitt: 4,80 von 5)
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-16), 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. ccp

    Hallo Markus,
    deine Navigationslösung hört sich interessant an; ich würde die Beispieldatei gern herunterladen:
    – bei FB angemeldet
    – Gefällt mir geklickt
    – Download startet nicht :(

    Kannst du mir weiterhelfen?

    greetz
    ccp

  2. ccp

    … sorry, Bitte zurückgenommen … im anderen Browser hats geklappt … danke sehr für deine Mühe & einen feinen Tag

Schreiben Sie einen Kommentar

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

10% Rabatt im Onlineshop