Vorgänge automatisch steuern mit einer Vorgangsmaschine.

Scripts auf FileMaker Server aus Runtime ausführenBei der Nutzung von FileMaker-Datenbanken im Netzwerk kann die Anforderung entstehen, Vorgänge auf Abruf oder automatisch zeitgesteuert von einem Client im lokalen Netzwerk ausführen zu lassen. Die Anwendungsbereiche einer Vorgangsmaschine können sehr vielfältig sein. Wenn Ihre FileMaker-Datenbank einen Zugriff von außen über WebDirect erlaubt, können Sie mit einer Vorgangsmaschine beispielsweise Dokumente erstellen und als PDF-Datei zum Download bereitstellen. Da der Vorgang auf einem Client in Ihrem lokalen Netzwerk ausgeführt wird, können erstellte Dateien problemlos auf einem Netzlaufwerk innerhalb des lokalen Netzwerks gespeichert werden. Ein anderes Anwendungsgebiet sind sogenannte Cronjobs – also Vorgänge, die zu einem vordefinierten Zeitpunkt und ggf. in bestimmten Intervallen von der Vorgangsmaschine ausgeführt werden. Wie Sie eine einfache Vorgangsmaschine mit zeitgesteuerten Cronjobs und Ausführungsprotokoll in FileMaker realisieren können, erfahren Sie in diesem Beitrag.

Virtueller Mitarbeiter mit eigenem FileMaker-Client

Ausgangsbasis für eine Vorgangsmaschine ist ein eigener Mac oder Windows-PC mit installiertem FileMaker-Client. In FileMaker ist ausschließlich ein Layout (aut.Vorgänge) aufgerufen, das mit einem Script-Trigger versehen wurde. Sobald in der Tabelle des Layouts aut.Vorgänge ein neuer Datensatz erzeugt wird, beginnt die Vorgangsmaschine mit der Bearbeitung des im Datensatz gelieferten Vorgangs.

Vorgangstabelle und Protokoll als Basis

Um Vorgänge auszuführen und als Protokoll speichern zu können, benötigen Sie zunächst zwei neue Datentabellen:

  • Vorgänge (1 Datensatz = 1 Vorgang zur Bearbeitung für die Vorgangsmaschine)
  • Vorgangsprotokoll (1 Datensatz = 1 Vorgang, der von der Vorgangsmaschine bearbeitet wurde)

Die Tabelle Vorgänge enthält normalerweise keine Datensätze und wird scriptgesteuert in dem Moment mit einem Datensatz befüllt, wenn die Vorgangsmaschine einen bestimmten Vorgang ausführen soll. Sobald der Vorgang ausgeführt wurde, wird ein neuer Datensatz im Protokoll erstellt und der Datensatz in der Tabelle Vorgänge wieder gelöscht.

Es lauschet die Vorgangsmaschine…

Damit die Vorgangsmaschine in Echtzeit erfährt, daß ein neuer Vorgang auszuführen ist, benötigen wir ein entsprechendes Layout, das Datensätze aus der Tabelle Vorgänge anzeigt. In unserer Beispieldatei heißt dieses Layout aut.Vorgänge. Dieses Layout besitzt einen Layout-Script-Trigger (BeiDatensatzLaden), der das Script zur Bearbeitung des Vorgangs ausführt, sobald sich ein neuer Datensatz in der Tabelle Vorgänge befindet. 

Layout-Script-Trigger für Vorgangsmaschine

Wenn ein neuer Datensatz zur Tabelle Vorgänge hinzugefügt wird, führt die Vorgangsmaschine automatisch das Script lay.Vorgangsmaschine mit dem Script-Trigger trigger.Layout aus. Voraussetzung dafür ist, daß sich die Vorgangsmaschine über den gesamten Zeitraum auf dem Layout aut.Vorgänge befindet, da nur dieses Layout über den eingerichteten Script-Trigger verfügt.

Auf der Vorgangsmaschine können Sie übrigens automatisch dafür sorgen, daß der Client nach dem Start Ihrer FileMaker-Datenbank direkt auf das Layout aut.Vorgänge wechselt. Stellen Sie dazu in FileMaker Pro auf der Vorgangsmaschine einen eigenen Benutzer für die Vorgangsmaschine als Standardbenutzer ein (Ablage > Dateioptionen, „Anmelden mit“). Wenn Ihre Lösung über ein Startscript verfügt, können Sie nun ganz einfach den Benutzer für die Vorgangsmaschine abfangen und eine Konstruktion verwenden wie zum Beispiel:

Wenn (Hole (KontoName) = „Vorgangsmaschine“)
   Gehe zu Layout [ „aut.Vorgänge“ ]
Ende (Wenn)

Bitte beachten Sie, daß das Drucken und Erstellen von PDF-Dateien seit der FileMaker-16-Plattform auch in WebDirect möglich ist. Wenn Sie also FileMaker Server 16 und FileMaker Pro 16 einsetzen und lediglich Ausdrucke oder PDF-Dateien in WebDirect erzeugen möchten, ist die hier vorgestellte Lösung für Ihre Lösung möglicherweise nicht mehr erforderlich.

Drei Scripte zur Steuerung aller Vorgänge

Unsere FileMaker-Beispiellösung enthält drei Scripte, mit denen alle Vorgänge auf einfache Weise gesteuert werden können:

lay.Vorgangsmaschine – Dieses Script wird von der Vorgangsmaschine ausgeführt, sobald in der Tabelle Vorgänge ein neuer Datensatz erzeugt wurde. Der Aufruf erfolgt über das Layout aut.Vorgänge mit dem oben genannten Layout-Script-Trigger. Der Teil zur Ausführung von Vorgängen wurde im Script mit dem Parameter trigger.Layout versehen, so daß es möglich ist, dieses Script mit anderen Parametern auch noch für andere Aufgaben zu nutzen.

Da sich der Befehl, den die Vorgangsmaschine ausführen soll, direkt in der Datenbank Vorgänge befindet, können Sie beliebige Vorgangs-Befehle definieren und in diesem Script abarbeiten lassen. Das Grundprinzip ist dabei immer gleich:

Wenn [ Hole(ScriptParameter) = „trigger.Layout“ ]

Script wird nur ausgeführt, wenn es mit dem Script-Parameter trigger.Layout aufgerufen wird.

   Wenn [ Vorgänge::Befehl = „Daten senden“ ]

Nachfolgendes Script wird nur ausgeführt, wenn der übermittelte Befehl Daten senden lautet.

      Ihr Vorgang

Hier können Sie einen beliebigen Vorgang programmieren

      Datensatz/Abfrage löschen [Mit Dialog: Aus]

Löscht den abgearbeiteten Datensatz aus der Tabelle Vorgänge

      Script ausführen [ „ts.Vorgangsprotokoll“; Parameter: … ]

Fügt einen neuen Datensatz in das Vorgangsprotokoll ein unter Berücksichtigung aller im Script vorhandenen Variablen.

   Ende (wenn)

Ende (wenn)

ts.Vorgang_eintragen – Mit diesem Script tragen Sie einen beliebigen Vorgang in die Tabelle Vorgänge ein. Dieses Script können Sie also von einer beliebigen Stelle aus Ihrer Datenbank heraus aufrufen. Alle verwendeten Befehle können auch in FileMaker Go oder in WebDirect ausgeführt werden. Das Script nimmt in unserem Beispiel vier Script-Parameter an: Befehl, E-Mail, Daten-ID und den Benutzernamen. Diese vier Parameter werden im Laufe des Scripts einfach als neuer Datensatz in die Tabelle Vorgänge eingetragen. Selbstverständlich können Sie dieses Script individuell erweitern und beispielsweise auch andere Schlüssel wie eine Angebot-ID, Rechnung-ID oder Kunden-ID übermitteln. In diesem Fall müssen Sie die Tabelle Vorgänge und das Vorgangsprotokoll ebenfalls um diese jeweiligen Felder erweitern.

Das Script ist sehr einfach aufgebaut: Im ersten Teil werden die Script-Parameter (getrennt mit Hochstrich) in Variablen geschrieben. Hierfür verwenden wir in unserer Beispieldatenbank die Custom Function „StringSpalten“. Sie können hierfür auch eine andere Technologie verwenden und die Parameter beispielsweise auch als normale Liste übertragen, die Sie im Script mit der Funktion „HoleWert ()“ auslesen können.

ts.Vorgangsprotokoll – Sobald durch das Script ts.Vorgang_eintragen ein neuer Datensatz in der Tabelle Vorgänge erzeugt wurde und sich die Vorgangsmaschine auf dem Layout aut.Vorgänge befindet, wird der Vorgang automatisch durch das Script lay.Vorgangsmaschine abgearbeitet und der Datensatz der Tabelle Vorgänge gelöscht. Daraufhin wird das Script ts.Vorgangsprotokoll mit identischen Variablen aufgerufen, um einen neuen Datensatz im Vorgangsprotokoll anzulegen. Der Aufbau des Scripts ist weitgehend identisch mit dem Script ts.Vorgang_eintragen, mit dem Unterschied, daß der Datensatz im Protokoll und nicht in der Tabelle Vorgänge erzeugt wird.

Stammdaten für Vorgänge

In manchen Fällen benötigen Sie weitere Stammdaten für einen Vorgang, um beispielsweise Dokumente per E-Mail versenden zu können. Sie werden dann z.B. vordefinieren wollen, welchen Betreff und Text eine entsprechende E-Mail beinhalten soll. Für diesen Zweck haben wir in unserer Beispiellösung die Datentabelle Vorgangsstamm angelegt. Jeder Datensatz in dieser Tabelle entspricht den Stammdaten für einen Vorgang. Der Wert im Feld Name_Vorgang entspricht dem Namen eines Vorgangs, wie er auch durch das Script ts.Vorgang_eintragen verwendet wird.

Vorgänge definieren im Vorgangsstamm

Optionale Platzhalter für E-Mails

Bei Bedarf können Sie in den Vorlagetexten „E-Mail Betreff“ und „E-Mail Text“ Platzhalter definieren, die Sie in den Teilscripten des Scriptes „lay.Vorgangsmaschine“ durch echte Daten ersetzen können. Beide Texte werden in unserem Beispielscript per SQL-Query in die Variablen $email_betreff und $email_text geschrieben. Möchten Sie in einer Textvorlage beispielsweise einen Platzhalter {Name_Kunde} ersetzen, erweitern Sie die SQL-Query in diesen beiden Variablendefinitionen um den ‚Austauschen ( )‘-Befehl:

Variable setzen [$email_text; Wert: Austauschen ( SQL-Query; „{Name_Kunde}“; Tabelle::Name_Kunde) ]

Auf diese Weise können Sie beliebig viele Platzhalter in Ihren E-Mail-Vorlagen verwenden, die Sie in den Variablendefinitionen für die Variablen $email_betreff und $email_text ganz einfach durch echte Daten ersetzen können.

Zeitgesteuerte Vorgänge mit Cronjobs (Plugin erforderlich)

Unsere Beispieldatei für eine Vorgangsmaschine haben wir zusätzlich mit der Möglichkeit ausgestattet, zeitlich gesteuerte Cronjobs zu bearbeiten. Das Start- und Enddatum, die gewünschte Uhrzeit sowie das Intervall können im Vorgangsstamm definiert werden. Für die Nutzung dieser Funktion ist die Verwendung des MBS FileMaker Plugins erforderlich, da der Befehl ‚FM.RunScript‘ benötigt wird. Alternativ kann auch der Befehl ‚BE_ExecuteScript‘ des kostenlos erhältlichen BaseElements Plugins verwendet werden.

Einrichtung des Überwachungsscripts auf der Vorgangsmaschine

Alle Cronjobs werden vom Script cron.Vorgangsmaschine ausgeführt, das Sie über ein Timer-Script beispielsweise alle zehn Minuten aufrufen können. In unsere Beispiellösung haben wir ein Script cron.Timerscript integriert, das die Ausführung des Script cron.Vorgangsmaschine alle 600 Sekunden, also alle 10 Minuten, anstößt. Dieses Script können Sie beispielsweise unter Abfrage des Benutzernamens in das Startscript Ihrer Lösung integrieren, so daß der Timer automatisch gestartet wird, wenn der Benutzer der Vorgangsmaschine angemeldet ist.

Das Script cron.Vorgangsmaschine wechselt zunächst in das Layout Vorgangsstamm und ruft alle aktiven Cronjobs auf. Daraufhin beginnt eine Ausführungsschleife, in der für jeden gefundenen Cronjob überprüft wird, ob eine Ausführung fällig ist. Wenn ja, wird der entsprechende Cronjob ausgeführt.

Für Cronjobs können Sie die Ausführung beliebiger Scripte und ggf. entsprechender Script-Parameter definieren. Ein Cronjob führt also keine Teilscripte des Scripts lay.Vorgangsmaschine aus, sondern Sie können im Vorgangsstamm ein beliebiges Script samt Parameter für einen Cronjob definieren. Ein Cronjob kann also theoretisch beliebige Scripts aus Ihrer FileMaker-Lösung zeitgesteuert ausführen.

Download Beispieldatei für FileMaker 13 bis 16

Unsere Beispieldatei enthält alle im Beitrag genannten Scripte zur Integration in eigene FileMaker-Lösungen. Die in der Beispiellösung enthaltene Tabelle „Datentabelle“ dient lediglich zu Demonstrationszwecken und soll Datentabellen aus Ihrer eigenen FileMaker-Lösung entsprechen. 

Download FileMaker Beispieldatei

Vorgangsmaschine in gFM-Business integrieren

Im Rahmen einer offenen Lizenz können Sie dieses Beispiel einer Vorgangsmaschine problemlos auch in das gFM-Business ERP-System integrieren. Besitzer einer Lizenz von gFM-Business Custom können die Funktionalität einer Vorgangsmaschine durch uns in ihre Lösung integrieren lassen.

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 keine Bewertungen.)
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.

Schreiben Sie einen Kommentar

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