FileMaker-Datensätze direkt über eine PHP-API mit KI-Unterstützung erstellen - Direkt in FileMaker speichern: Eigene PHP-API statt n8n & Co

Viele Entwickler suchen nach Wegen, wie sich Notizen, Aufgaben oder Projekte aus natürlicher Sprache direkt in FileMaker übernehmen lassen – ohne Umweg über Integrationsplattformen wie n8n oder Make. Mit einem schlanken PHP-Skript und der FileMaker Data API ist genau das möglich.

Bildschirmfoto 2025-09-13 um 19.36.55.

Idee und Zielsetzung

Der Ansatz ist denkbar einfach: 1. Ein Benutzer spricht oder schreibt einen kurzen Text. 2. Dieser Text wird per JSON-POST an ein PHP-Skript geschickt. 3. Das Skript analysiert den Text mithilfe einer KI (Claude AI oder ChatGPT). 4. Je nach Analyse wird in FileMaker ein neuer Datensatz erstellt oder ein bestehender ergänzt.

So lassen sich Workflows wie “Meeting morgen mit Kunde Müller anlegen” oder “Status-Update für Projekt A-123” in Sekunden automatisieren.

Das PHP-Skript

Das Herzstück ist eine kleine API, die im Webserver läuft, nennen wir sie analyze_text.php.

  1. Empfang der Daten

Das Skript nimmt POST-Anfragen mit JSON entgegen:

{
  "text": "Rückruf morgen für A-123"
}
  1. KI-Analyse

Die KI wird mit einer klaren Vorgabe aufgerufen: sie soll den Text in ein JSON mit festen Feldern zerlegen – darunter action, project_id, date, text und user.

Beispielausgabe:

{
  "action": "create_note",
  "project_id": "A-123",
  "date": "2025-09-14",
  "text": "Rückruf morgen"
}
  1. Verbindung zu FileMaker

Über die FileMaker Data API erfolgt ein Login mit Benutzername und Passwort. Anschließend lassen sich: • bestehende Projekte finden (_find-Abfrage nach Projekt-ID) • Portalzeilen anlegen (z. B. Notizen im Projekt) • neue Projekte erzeugen (wenn keine Referenz existiert)

Dafür verwendet das Skript die REST-Endpunkte wie: • POST /fmi/data/vLatest/databases//sessions → Login • POST /layouts//_find → Projektsuche • PATCH /layouts//records/ → Portalzeile erstellen • POST /layouts//records → neuen Datensatz anlegen

  1. Ergebnis

Das Skript gibt eine JSON-Antwort zurück, z. B.:

{
  "ok": true,
  "original_text": "Rückruf morgen für A-123",
  "extracted": {
    "action": "create_note",
    "project_id": "A-123",
    "date": "2025-09-14",
    "text": "Rückruf morgen"
  },
  "filemaker": {
    "note_created": true,
    "project_record_id": "12345"
  },
  "timestamp": "2025-09-13 16:30:00"
}

Vorteile des Ansatzes • Keine Drittanbieter wie n8n oder Zapier notwendig • Direkter Zugriff auf FileMaker per Data API • Flexibel erweiterbar um eigene Aktionen (Tasks, Kontakte, Termine) • Einfache Integration in FileMaker-Layouts über einen WebViewer oder einen Button mit Insert from URL

Beispielanwendung in FileMaker • Button „Sprachnotiz analysieren“: Aufnahme → Text → POST an analyze_text.php • Automatisches Anlegen von Terminen oder Notizen im Projekt • Projektanlage per Sprache: „Neues Projekt mit Kunde Meier starten“ → neuer Datensatz mit Name und Kunde wird angelegt

Fazit

Mit nur einem PHP-Skript und der FileMaker Data API lässt sich ein eigener Mini-Connector bauen, der Sprache oder Texte in strukturierte FileMaker-Daten verwandelt. Das spart nicht nur Kosten für Integrationsdienste, sondern erlaubt auch maximale Kontrolle und Anpassung.


Tourenplanung in FileMaker, über clustern, Kosten sparen!

Wer schon einmal versucht hat, in FileMaker mit vielen Adressen eine Route über die Google Maps API zu planen, kennt das Problem. Ab einer gewissen Anzahl von Stopps schnellen die Kosten nach oben und die Performance leidet. Aber genau hier setzt mein Ansatz an: -Clustering-.

Warum Clustering?

Google erlaubt pro Request in der Directions API nur 25 Zwischenstopps (plus Start und Ziel). Mehr geht nicht. Mit 80 Kundenadressen wären das also drei bis vier Requests, wenn man clever plant.

Ohne Clustering würde man mit der Distance Matrix API schnell in den vierstelligen Bereich an Elementen kommen (80 × 80 = 6.400), die abgerechnet werden. Mit Clustering dagegen, vier kleine Matrizen a 20 × 20 = 400. Macht in Summe 1.600. Das sind 75 % weniger Kosten und dazu deutlich weniger Wartezeit.

1.	Geocoding – jede Adresse bekommt saubere Koordinaten.
2.	K-Means Clustering – die Adressen werden nach geografischer Nähe in Gruppen aufgeteilt (z. B. vier Cluster mit je 20 Stopps).
3.	Optimierung je Cluster – innerhalb des Clusters wird die Reihenfolge berechnet.
4.	Routes API – für jedes Cluster wird die Route berechnet, nie mehr als 25 Stopps.
5.	FileMaker-Integration – die Ergebnisse landen als einfache JSON-/GET-Antwort wieder in FileMaker, wo sie importiert und angezeigt werden können.

Das Ganze läuft mit Session-IDs, sodass FileMaker volle Kontrolle über den Ablauf hat und wir persistente Daten auch später noch abrufen können.

Demo-Daten für den Praxistest

Für das nächste FileMaker-Magazin haben wir Demo-Daten vorbereitet: • 80 Adressen im Raum Berlin/Brandenburg (kann natürlich geändert werden) • passende Kontaktdaten • und natürlich die fertige Clusterlösung

Damit kann jeder sofort ausprobieren, wie aus einer unübersichtlichen Masse von Stopps überschaubare Touren werden.


Neu: ZUGFeRD/UBL Reader Add-on für FileMaker

Elektronische Rechnungen sind längst Standard, insbesondere im öffentlichen Bereich mit UBL/XRechnung und bei Geschäftspartnern mit ZUGFeRD 2.1.1. Für viele FileMaker-Anwender stellt sich die Frage: Wie lassen sich diese Rechnungen direkt in bestehende Systeme integrieren, ohne jede Datei manuell zu erfassen?

Zugferd Reader.

Genau hier setzt unser neues ZUGFeRD/UBL Reader Add-on an.

Was kann das Add-on? • ZUGFeRD-PDFs einlesen: XML wird automatisch erkannt und verarbeitet • UBL/XRechnung unterstützen: kompatibel mit den gängigen Behörden- und Portallösungen • Strukturierte JSON-Ausgabe: Kopf-, Positions- und Steuerdaten stehen FileMaker-konform bereit • Beispielskripte und Mapping: sofort loslegen mit vorbereiteten Routinen • Flexibel im Einsatz: Einzelplatz oder Serverumgebung

Warum ist das wichtig? • Zeitersparnis: keine manuelle Eingabe von Rechnungsdaten mehr • Rechtssicherheit: Unterstützung aktueller Standards für E-Rechnung • Offen & erweiterbar: klare Dokumentation, kein Vendor-Lock-in • Praxisnah: entwickelt von FileMaker-Experten mit jahrzehntelanger Projekterfahrung

Für wen ist das interessant? • Unternehmen mit Pflicht zur E-Rechnung (öffentlicher Sektor, Lieferanten) • FileMaker-Entwickler, die Buchhaltung oder ERP-Funktionen integrieren möchten • Teams, die Eingangsrechnungen automatisiert verarbeiten wollen


ZUGFeRD nicht nur erstellen, sondern auch lesen

Zugferd lesen.

Die meisten Entwickler verbinden ZUGFeRD oder Factur-X mit dem klassischen Anwendungsfall:

Eine Rechnung in FileMaker erzeugen, die dann als PDF mit eingebettetem XML an den Kunden geht. Doch im täglichen Einsatz ergibt sich oft das umgekehrte Szenario: Eingehende ZUGFeRD-Rechnungen sollen in das eigene System importiert und weiterverarbeitet werden. Genau hier zeigt sich die eigentliche Stärke des Standards, denn er erlaubt eine strukturiert maschinenlesbare Übergabe von Rechnungsdaten ohne dass man auf PDF-Parsing oder OCR-Erkennung angewiesen wäre.

Der Ansatz:

Mein Ziel war es, neben der Erzeugung auch das Einlesen von ZUGFeRD-Dateien in eine FileMaker-Lösung zu integrieren. Der Workflow ist dabei erstaunlich klar: 1. Der Anwender zieht eine ZUGFeRD-PDF in ein Containerfeld. 2. Ein FileMaker-Script übernimmt den Upload und prüft die Datei. 3. Die eingebettete XML-Datei wird mit Hilfe des PHP-Pakets horstoeko/zugferd extrahiert und ausgewertet. 4. Als Rückgabe erhalte ich ein kompaktes JSON, das sich in FileMaker direkt weiterverarbeiten lässt.

Damit ist der Kreis geschlossen: Eingehende Rechnungen können automatisch gelesen, geprüft und in die eigene Datenbank übernommen werden.

Technische Umsetzung

Im einfachsten Fall genügt ein FileMaker-Skript, das den Containerinhalt temporär exportiert und per curl an das Server-Skript übergibt:

Variable setzen [ $filename ; HoleContainerAttribute ( Rechnung::g_pdf ; "filename" ) ]
Variable setzen [ $tmpFS ; Hole ( TemporärerPfad ) & $filename ]
Exportiere Feldinhalt [ Rechnung::g_pdf ; "file:" & $tmpFS ]
Variable setzen [ $url ; "[meine-domain.de/mc/receiv...](https://meine-domain.de/mc/receive_pdf_upload.php)" ]
Variable setzen [ $curl ; "--request POST --upload-file " & Quote ( $tmpFS ) & 
                          " --header \"Content-Type: application/pdf\"" ]
Aus URL einfügen [ Auswahl ; Mit Dialog: Aus ; Ziel: $$response ; $url ; 
                   SSL-Zertifikate verifizieren ; cURL-Optionen: $curl ]

Das PHP-Skript wiederum nimmt die hochgeladene PDF entgegen, übergibt sie an horstoeko und liefert ein strukturiertes JSON zurück:

{
    "ok": true,
    "mode": "raw",
    "file": "/www/htdocs/w01da32b/maps.maro-testserver.de/mc/uploads/upload.pdf",
    "data": {
        "profile": "EN16931",
        "profileId": 2,
        "invoiceNumber": "INV-2025-001",
        "typeCode": "380",
        "issueDateTime": "2025-08-01 18:57:53",
        "currency": "EUR",
        "taxCurrency": null,
        "language": null,
        "isCopy": false,
        "isTest": false,
        "seller": {
            "name": "MaRo-Programmierung GbR",
            "globalId": "16547",
            "description": "Birkenwerder",
            "address": {
                "lineOne": null,
                "lineTwo": null,
                "lineThree": null,
                "postCode": null,
                "city": null,
                "country": null,
                "subdivision": null
            }
        },
        "buyer": {
            "name": "Fensterhaus Ansbach GmbH",
            "globalId": "91522",
            "description": "Ansbach",
            "address": {
                "lineOne": null,
                "lineTwo": null,
                "lineThree": null,
                "postCode": null,
                "city": null,
                "country": null,
                "subdivision": null
            }
        },
        "totals": {
            "grandTotal": 1249.5,
            "duePayable": 1249.5,
            "lineTotal": 1050,
            "taxTotal": 199.5,
            "taxBasisTotal": 1050,
            "chargeTotal": null,
            "allowanceTotal": null,
            "roundingAmount": null,
            "totalPrepaidAmount": null
        },
        "payment": {
            "typeCode": "58",
            "information": null,
            "payeeIban": "DE12345678901234567890",
            "payeeBic": "GENODEF1XYZ",
            "accountName": "Testbank",
            "buyerIban": null,
            "cardType": null,
            "cardId": null,
            "cardHolderName": null
        },
        "tax": [
            {
                "categoryCode": "S",
                "typeCode": "VAT",
                "basisAmount": 1050,
                "calculatedAmount": 199.5,
                "rateApplicablePercent": 19,
                "exemptionReason": null,
                "exemptionReasonCode": null,
                "lineTotalBasisAmount": 0,
                "allowanceChargeBasisAmount": 0,
                "taxPointDate": null,
                "dueDateTypeCode": null
            }
        ],
        "lines": [
            {
                "lineId": "1",
                "name": "Entwicklung und Anpassungen",
                "description": null,
                "sellerId": null,
                "buyerId": null,
                "globalIdType": null,
                "globalId": null,
                "quantity": 10,
                "unitCode": "HUR",
                "unitPrice": 90,
                "netAmount": 900,
                "basisQuantity": null,
                "basisQuantityUnitCode": null,
                "chargeFreeQuantity": null,
                "chargeFreeQuantityUnitCode": null,
                "allowanceChargeAmount": null,
                "taxPercent": 19,
                "taxCategory": "S",
                "taxTypeCode": "VAT",
                "taxCalculatedAmount": null,
                "allTaxes": [
                    {
                        "categoryCode": "S",
                        "typeCode": "VAT",
                        "rateApplicablePercent": 19,
                        "calculatedAmount": null,
                        "exemptionReason": null,
                        "exemptionReasonCode": null
                    }
                ]
            },
            {
                "lineId": "2",
                "name": "Remote-Support pauschal",
                "description": null,
                "sellerId": null,
                "buyerId": null,
                "globalIdType": null,
                "globalId": null,
                "quantity": 1,
                "unitCode": "C62",
                "unitPrice": 150,
                "netAmount": 150,
                "basisQuantity": null,
                "basisQuantityUnitCode": null,
                "chargeFreeQuantity": null,
                "chargeFreeQuantityUnitCode": null,
                "allowanceChargeAmount": null,
                "taxPercent": 19,
                "taxCategory": "S",
                "taxTypeCode": "VAT",
                "taxCalculatedAmount": null,
                "allTaxes": [
                    {
                        "categoryCode": "S",
                        "typeCode": "VAT",
                        "rateApplicablePercent": 19,
                        "calculatedAmount": null,
                        "exemptionReason": null,
                        "exemptionReasonCode": null
                    }
                ]
            }
        ]
    }
}

Dieses JSON ist das ideale Bindeglied: In FileMaker genügt ein Loop über data.lines[], um die einzelnen Positionen anzulegen. Kopf und Summenfelder lassen sich direkt in Variablen schreiben und anschließend auf beliebige Felder mappen.

Warum das spannend ist • Automatisierte Buchung: Eingehende Lieferantenrechnungen können ohne Medienbruch erfasst werden. • Plausibilitätsprüfung: Brutto = Netto + Steuer lässt sich sofort abgleichen. • Flexibilität: Egal ob Erzeugung oder Import dieselbe Technik (PHP + horstoeko) kann beides.

Fazit

Während viele nur an die Ausgabe denken, ist gerade das Einlesen der eigentliche Schlüssel zur durchgängigen Digitalisierung von Rechnungsprozessen. Mit ZUGFeRD lassen sich Daten beidseitig austauschen und mit ein paar Skriptzeilen in FileMaker hat man plötzlich nicht nur ein Export, sondern auch eine Import-Funktion in der Hand.


Endlich ist es fertig: ZUGFeRD in FileMaker – Integration in unter einer Stunde

ZUGFeRD UBL.

Nach intensiver Entwicklung ist es soweit: Unser ZUGFeRD-/Factur-X Add-on für FileMaker ist fertig! 🎉 Wer schon einmal versucht hat, ZUGFeRD in eine FileMaker-Anwendung einzubauen, kennt die Herausforderung: Eigenentwicklungen ziehen sich über Tage oder Wochen, kosten Zeit, Geld und Nerven – und am Ende bleibt die Frage nach der Wartbarkeit.

Mit unserem Add-on gehen wir einen anderen Weg. Keine Programmierung, kein kompliziertes Skripten, stattdessen Mapping.

Mapping statt Programmieren

Die Implementierung basiert auf dem offiziellen COMFORT-Profil von ZUGFeRD/Factur-X. Das bedeutet: Alle relevanten Rechnungsdaten werden abgedeckt, ohne dass man sich selbst tief in Spezifikationen und Normdetails einarbeiten muss.

Anstatt eigene Scripts oder Datenmodelle zu schreiben, werden die bestehenden Felder in FileMaker einfach über ein Mapping den benötigten ZUGFeRD-Feldern zugeordnet. Damit bleibt die eigene Struktur unverändert, und trotzdem erfüllt die Anwendung sofort den Standard.

In weniger als einer Stunde einsatzbereit

Der größte Vorteil: Die Integration dauert in der Regel nicht länger als eine Stunde. Das Add-on klinkt sich direkt in die bestehende FileMaker-Datenbank ein, ohne dass das Rechnungslayout oder vorhandene Scripts angepasst werden müssen.

Wer möchte, kann die Integration jederzeit durch eigenes Skripting erweitern – doch die Grundinstallation läuft komplett ohne Programmieraufwand.

Vorteile gegenüber Eigenentwicklung • Zeitersparnis: statt tagelanger Arbeit → unter einer Stunde fertig. • Kostenreduktion: keine teuren Eigenentwicklungen, kein externer Entwickler notwendig. • Zukunftssicherheit: Nutzung des offiziellen ZUGFeRD-COMFORT-Profils, das in vielen Branchen bereits Standard ist. • Flexibilität: Erweiterungen und Anpassungen sind jederzeit möglich, aber nicht zwingend nötig.

Fazit

Endlich verfügbar! Mit unserem ZUGFeRD-Add-on für FileMaker sparen Sie Zeit, Geld und Ressourcen – und bleiben dabei normenkonform.


Morgen verfügbar: Das FileMaker ZUGFeRD / UBL Add-on – elektronische Rechnungen ohne Umbau der bestehenden Lösung

Ab morgen Abend steht unser neues FileMaker Add-on für ZUGFeRD / UBL zur Verfügung, die wohl einfachste Möglichkeit, elektronische Rechnungen direkt aus einer bestehenden FileMaker-Lösung zu erzeugen.

New ZUGFeRDZ.

Das Besondere daran: Kein Umbau der vorhandenen Lösung nötig. • Keine Änderungen am bestehenden Rechnungslayout – Ihre gewohnten Drucklayouts bleiben, wie sie sind. • Keine Anpassungen an bestehenden Scripts – der Ablauf Ihrer Rechnungserstellung wird nicht verändert. • Alles läuft über ein flexibles Mapping – Sie wählen einfach das Layout aus, auf dem die relevanten Felder zu finden sind, und ordnen diese den vorgegebenen Platzhaltern zu.

Technische Basis: • Läuft über die bewährte PHP-Bibliothek horstoeko/zugferd, aktuell eine der stabilsten und meistgenutzten Open-Source-Lösungen für ZUGFeRD und Factur-X. • Automatische Validierung der erzeugten XML-Struktur, fehlerhafte Daten werden erkannt, bevor die Rechnung erstellt wird. • Keine zusätzlichen Plugins nötig. Das System läuft vollständig mit Bordmitteln von FileMaker und PHP. • Flexibel in der Ausführung: • Lokal z. B. auf einem Einzelplatzrechner mit PHP • Über den FileMaker Server für automatisierte oder geplante Verarbeitung

Unterstützt werden: • ZUGFeRD in den gängigen Profilen (Basic, Comfort …) • UBL als international verbreiteter XML-Standard

Das Add-on übernimmt den Rest: • Erzeugung der XML-Datei • Einbettung in die PDF (ZUGFeRD-konform) • Fertige elektronische Rechnung zum Versand an Kunden, Behörden oder Portale

Startschuss: Morgen Abend. Weitere Informationen, Screenshots und eine ausführliche Dokumentation finden Sie dann hier auf unserer Seite.


Seamless Email Integration for FileMaker – now in English!

Seamless Email Integration for FileMaker – now in English!

Now available: FM MailBridge – the add-on for anyone who wants to integrate email into their FileMaker solutions seamlessly. No external tools. No manual workarounds. Just pure IMAP.

Whether you’re using it as a standalone on your local machine, deploying it on a server, or bundling it into your own commercial FileMaker projects – FM MailBridge makes it possible to process and manage emails directly within FileMaker. Clean, efficient, and fully customizable.

What is FM MailBridge?

FM MailBridge is a standalone PHP-based module that connects directly to IMAP mailboxes and delivers structured email data – including attachments – to FileMaker via Insert from URL. The complete message is returned as JSON, including: • Sender, subject, date • Email body (plain text or HTML) • Attachments (Base64-encoded, with filename & MIME type)

The integration is designed to work with any FileMaker solution – locally, server-side, or as part of a commercial product.

Three license models to fit your needs:

  1. Single User – €49 For local use by developers or single users. Runs via local web server.

  2. Server – €199 For centralized use on a FileMaker Server (via scheduled script or PSOS). No client setup required.

  3. Enterprise – €699 For developers and agencies who want to integrate FM MailBridge into their own FileMaker products and resell it.

Why FM MailBridge? • Direct IMAP access – no Google API or OAuth required • Works with Gmail, Outlook, hosted mailboxes, and more • Returns structured email data as JSON (incl. attachments) • Fully customizable for any FileMaker environment • No external tools – just PHP and FileMaker

Technical Background

The solution relies on a lean PHP script that connects to an IMAP inbox, fetches and processes emails, and returns them as JSON. FileMaker then handles this data within its own table structure. The setup is solid, battle-tested with thousands of messages, and intentionally lightweight.

Product page & download: filemaker-experts.de/applicati…


FM MailBridge ist da, E-Mails direkt in FileMaker integrieren

Image server.

Ab sofort verfügbar: FM MailBridge, das Add-on für alle, die E-Mails nahtlos in ihre FileMaker-Lösungen einbinden möchten ohne externe Tools, ohne manuelle Umwege, direkt per IMAP.

Ob als Einzelplatzversion, für den Servereinsatz oder als Entwicklerlizenz zur Weiterverwertung in eigenen Projekten. FM MailBridge macht es möglich, E-Mails automatisiert in deine FileMaker-Umgebung zu integrieren. Übersichtlich, effizient und vollständig anpassbar.

Was ist FM MailBridge?

FM MailBridge ist ein eigenständiges PHP-basiertes Modul, das sich direkt mit IMAP-Postfächern verbindet und E-Mails samt Anhängen strukturiert an FileMaker übergibt. Dieses erfolgt via Insert from URL. Dabei wird der komplette Mailinhalt als JSON übergeben: Absender, Betreff, Datum, Text (wahlweise HTML oder nur Text) und wenn vorhanden, Base64-kodierte Anhänge inkl. Dateiname und MIME-Typ.

Die Integration ist so konzipiert, dass sie in beliebige FileMaker-Projekte eingebaut werden kann. Entweder lokal, serverseitig oder als Bestandteil einer kommerziellen Lösung.

Drei Lizenzmodelle für jeden Anwendungsfall:

  1. Einzelplatz Für den lokalen Abruf durch einen Entwickler oder Einzelplatznutzer. Einrichtung über lokalen Webserver. -49 €

  2. Server Für den zentralen Einsatz auf einem FileMaker Server (mit Zeitplan oder PSOS). Keine Client-Einrichtung nötig. -199 €

  3. Enterprise Für Entwickler und Agenturen, die FM MailBridge in eigene FileMaker-Projekte einbauen und weiterverkaufen möchten. -699 €

Was macht FM MailBridge besonders?

•	Nutzt reinen IMAP-Zugriff, keine Google API oder OAuth erforderlich
•	Funktioniert mit Gmail, Outlook, Webhostern u. v. m.
•	Übergibt Mails strukturiert als JSON (inkl. Anhänge)
•	Vollständig anpassbar für beliebige FileMaker-Lösungen
•	Keine externen Tools nötig, nur PHP & FileMaker

Technischer Hintergrund

Die Kommunikation erfolgt über ein kompaktes PHP-Skript, das IMAP-Mails abruft, verarbeitet und als JSON zurückliefert. FileMaker verarbeitet diese Daten direkt innerhalb der eigenen Tabellen-Strucktur. Der Aufbau ist stabil, getestet mit tausenden E-Mails und bewusst schlank gehalten.

Produktseite & Download: https://filemaker-experts.de/application.html

Fragen zur Integration, Lizenz oder Sonderfällen? Schreib uns an: support@filemaker-experts.de


Implementierung des IMAP‑AddOns in FileMaker

In unserem neuesten Video zeigen wir Schritt für Schritt, wie Sie unser IMAP‑AddOn in Ihre FileMaker‑Lösung integrieren – von der Einbindung bis zur ersten produktiven Nutzung. Innerhalb von nur zwei Minuten steht Ihnen ein vollwertiger Mail‑Client direkt in Ihrer FileMaker‑Umgebung zur Verfügung. Keine komplizierte Einrichtung, keine zusätzlichen Tools: einfach installieren, konfigurieren und loslegen.

Sehen Sie selbst, wie einfach sich E‑Mails abrufen, durchsuchen und verarbeiten lassen – nahtlos eingebettet in Ihre bestehende Lösung.

Link zum Video auf Canva von FileMaker Experts

Mein kleiner feiner Mail‑Client, auch als Add‑on nutzbar!

In den letzten Wochen habe ich etwas entwickelt, das ich selbst schon lange gebraucht habe: Einen voll anpassbaren Mail‑Client, der sich nahtlos in FileMaker integrieren lässt. Und weil es so gut geworden ist, gibt’s das Ganze jetzt auch als Add‑on für alle, die ähnliche Anforderungen haben. Eigentlich wollte ich nur die Funktionalität des Mail-Abrufes aufzeigen. Nun ist ein kleiner FileMaker-Mail Klient daraus geworden.

Bildschirmfoto 2025-07-15 um 13.10.37.

Was kann das Add‑on? -Durchdachte Ordnerliste, dynamisch per JavaScript erzeugt -Dateianhänge werden automatisch in Containerfelder importiert -Schlank und effizient, keine 2 MB Gesamtgröße -Vollständig anpassbar an eigene Workflows und Layouts -Einfach einzubinden und erweiterbar – auch mit eigenen Skripten oder PHP‑Backends

Damit lassen sich IMAP‑Postfächer direkt aus FileMaker heraus durchstöbern, Mails anzeigen, Anhänge sichern und vieles mehr, ohne zusätzliche schwere Tools.

Warum als Add‑on? Arbeite ich mit einem Plugin, dann wird es oft zeitaufwendig. Tabellen, Layouts, Scripte etc. in die eigene Lösung einbauen. Häufige schnelle Notlösung, die Dateien zum Plugin als weitere FileMaker-Datei einbinden. Das recht sich aber im späteren Prozess fast immer.

Neugierig geworden? Schreib mir gern hier direkt auf LinkedIn oder besuche filemaker-experts.de für weitere Infos. Ich zeige dir gern in einer Erklärung, wie es funktioniert und wie du es in deinem System einsetzen kannst!

#FileMaker #AddOn #MailClient #IMAP #LowCode #Entwicklung #Automation #BusinessTools #FileMakerExperts


Neues FileMaker-Add-on: IMAP-Mailabruf direkt und lokal

Ich habe ein kompaktes Add-on für FileMaker entwickelt, das IMAP-Mails inkl. Anhänge direkt aus FileMaker abrufen kann – komplett lokal, ohne externen Server oder API.

Datenschutzfreundlich: Läuft lokal auf Windows & macOS – kein Hosting, keine Cloud-Abhängigkeit

Technisch gelöst über PHP: Ein integrierter Mini-Server (portable PHP) macht’s möglich. Einfach starten, nutzen, fertig.

Add-on-kompatibel: Einfach in bestehende FileMaker-Lösungen integrierbar

Ideal für: • automatisierte Mail-Importe • Anhänge (z. B. Rechnungen) direkt in FileMaker verarbeiten • vollständige lokale Kontrolle ohne Drittanbieter

Wer Interesse hat: Ich biete auch eine Demo-Version mit 7-Tage-Testlaufzeit an.

Bei Fragen einfach melden – ich freu mich über Austausch!

IMAP FileMaker.

#FileMaker #IMAP #AddOn #PHP #Lokal #Datenschutz #MaRoProgrammierung


E-Mails per IMAP auslesen und an FileMaker übergeben -Ohne Plugin-

In vielen FileMaker-Projekten stellt sich irgendwann die Frage: Wie integriere ich eingehende E-Mails samt Anhängen möglichst flexibel in meine Lösung? Besonders dann, wenn keine Drittanbieter-Dienste gewünscht sind und alles unter eigener Kontrolle laufen soll. In einem aktuellen Projekt habe ich genau das umgesetzt, mit einer simplen, robusten Lösung per PHP und IMAP, die hervorragend mit FileMaker zusammenspielt.

Bildschirmfoto 2025-07-10 um 16.58.22.

Zielsetzung

Das System soll eingehende E-Mails (z. B. aus einem Support-Postfach) auslesen, alle relevanten Felder wie Betreff, Absender, Datum, Text und Anhänge verarbeiten und die Informationen strukturiert an FileMaker übergeben. Das ganze in einem JSON-Format, das sofort weiterverarbeitet werden kann.

Technischer Aufbau

Die zentrale Komponente ist ein PHP-Skript, das per imap_open() auf das Postfach zugreift und wahlweise alle oder nur ungelesene Mails verarbeitet. Um die Performance zu schonen, wird beim ersten Abruf ein Zeitraum (z. B. 30 Tage) berücksichtigt, danach nur noch UNSEEN-Mails. Das Format der zurückgegebenen Daten ist JSON.

[
  {
    "uid": 542,
    "subject": "Neuer Auftrag",
    "from": "info@kunde.de",
    "date": "2025-07-10 09:22:00",
    "body": "Anbei unser Auftrag...",
    "attachments": [
      {
        "filename": "auftrag.pdf",
        "mime_type": "application/pdf",
        "size": 18320,
        "content": "JVBERi0xLjQKJ...(Base64)",
        "disposition": "attachment",
        "url": "[meine-domain.de/mailanhan...](https://meine-domain.de/mailanhang/auftrag.pdf)"
      }
    ]
  }
]

Diese Daten werden dann einfach verarbeitet. In meinem ersten test ist nur ein Anhang möglich, allerdings ist die Anpassung innerhalb von FileMaker nur mit geringem Aufwand verbunden. Um die Verarbeitung von Anhängen so einfach wie möglich zu gestalten, werden die Mail-Anhänge auf dem Server gespeichert. Per JSON wird wie ersichtlich die URL zurückgeliefert. Somit ist es im Anschluss des Skriptes innerhalb von FileMaker möglich, die Dateien in FM-Containern zu speichern.

# MailAbruf in file Mail

# 
# 
Aus URL einfügen [ Auswahl ; Mit Dialog: Aus ; Ziel: $$MAIL_JSON ; "[deine](https://deine)_url_test.de/cap/imap_fetch_mails.php" ]
# 
Variable setzen [ $anzahl ; Wert: ElementeAnzahl ( JSONListKeys ( $$MAIL_JSON ; "" ) ) ]
Variable setzen [ $json ; Wert: $$MAIL_JSON ]
# 
# 
Variable setzen [ $i ; Wert: 0 ]
# 
Schleife (Anfang) [ Flush: Immer ]
	Verlasse Schleife wenn [ $i ≥ $anzahl ]
	Variable setzen [ $uid ; Wert: JSONGetElement ( $json ; "[" & $i & "].uid" ) ]
	Variable setzen [ $subject ; Wert: JSONGetElement ( $json ; "[" & $i & "].subject" ) ]
	Variable setzen [ $from ; Wert: JSONGetElement ( $json ; "[" & $i & "].from" ) ]
	Variable setzen [ $date ; Wert: JSONGetElement ( $json ; "[" & $i & "].date" ) ]
	Variable setzen [ $body ; Wert: JSONGetElement ( $json ; "[" & $i & "].body" ) ]
	Variable setzen [ $mime ; Wert: JSONGetElement ( $json ; "[" & $i & "].mime_type" ) ]
	Variable setzen [ $mime_type ; Wert: JSONGetElement ( $json ; "[" & $i & "].attachments[0].mime_type" ) ]
	# 
	#  Verarbeitung der Anhänge
	Variable setzen [ $anzahl_anhang ; Wert: ElementeAnzahl ( JSONListKeys ( $json ; "[" & $i & "].attachments" ) ) ]
	Wenn [ $anzahl_anhang > 0 ]
		Variable setzen [ $anhang_filename ; Wert: JSONGetElement ( $json ; "[" & $i & "].attachments[0].filename" ) ]
		Variable setzen [ $anhang_base64 ; Wert: JSONGetElement ( $json ; "[" & $i & "].attachments[0].base64" ) ]
		Variable setzen [ $mime_type ; Wert: JSONGetElement ( $json ; "[" & $i & "].attachments[0].mime_type" ) ]
		Variable setzen [ $anhang_url ; Wert: JSONGetElement ( $json ; "[" & $i & "].attachments[0].url" ) ]
	Ende (wenn)
	# 
	# 
	# 
	# 
	# Datensatz anlegen
	Neuer Datensatz/Abfrage
	Feldwert setzen [ Mails::uid ; $uid ]
	Feldwert setzen [ Mails::subject ; $subject ]
	Feldwert setzen [ Mails::from ; $from ]
	Feldwert setzen [ Mails::date ; $date ]
	Feldwert setzen [ Mails::body ; $body ]
	Feldwert setzen [ Mails::anhang_filename ; $anhang_filename ]
	Feldwert setzen [ Mails::anhang_base64 ; $anhang_base64 ]
	Feldwert setzen [ Mails::anhang_mime_typ ; $mime_type ]
	#  Datei als Anhang nach FileMaker
	Variable setzen [ $base64 ; Wert: Mails::anhang_base64 ]
	Variable setzen [ $mime ; Wert: Mails::anhang_mime_typ ]
	Variable setzen [ $name ; Wert: Mails::anhang_filename ]
	#  Data URL vorbereiten
	Feldwert setzen [ Mails::anhang_url ; $anhang_url ]
	Aus URL einfügen [ Auswahl ; Mit Dialog: Aus ; Ziel: Mails::anhang_container ; Mails::anhang_url ]
	Variable setzen [ $i ; Wert: $i + 1 ]
	#  Nun den Dateianhang wieder löschen
	Variable setzen [ $deleteURL ; Wert: "[deine](https://deine)_url_test.de/cap/delete_attachment.php?file=" &Mails::anhang_filename ]
	Scriptpause setzen [ Dauer (Sekunden): 1 ]
	Aus URL einfügen [ Auswahl ; Mit Dialog: Aus ; Ziel: $$ANTWORT ; $deleteURL ]
Schleife (Ende)

Um nicht die Anhänge längerfristig auf dem Server zu speichern, wird nach einer Scriptpause, ein weiteres PHP-Script aufgerufen. Dieses löscht den Anhang und stellt somit sicher, das dieser nicht über eine URL sichtbar gemacht werden kann.

Bildschirmfoto 2025-07-10 um 17.29.15.

Diese Lösung ist ideal für FileMaker-Projekte, bei denen volle Kontrolle über das E-Mail-System gewünscht ist. Sie erfordert kein IMAP-Plugin, kein MBS, keine externen Dienste und ist vollständig serverbasiert. Alles steuerbar über einfache URL-Aufrufe. Der Abruf von E-Mails wird so zum automatisierten Teil des Workflows, vom Posteingang bis zur direkten Weiterverarbeitung in FileMaker.


Mein Artikel ist im FileMaker Magazin erschienen!

Nun noch das aktuelle PDF als Auszug aus dem Magazin.

FMM_202503_9-12.pdf


Mein Artikel ist im FileMaker Magazin erschienen!

Mein Artikel ist im FileMaker Magazin erschienen!

Bildschirmfoto 2025-07-08 um 13.31.54.

Ich zeige darin, wie man eine sequentielle Suche mit PHP und FileMaker umsetzen kann. Eine Lösung, die auch bei großen Datenmengen performant bleibt.

Die Idee entstand, als ein bestehender Ansatz bei einem Kunden plötzlich ins Stocken geriet. Statt den Suchprozess in FileMaker zu quälen, habe ich den Fokus verlagert: -Export per CSV, -Suche in PHP, -Rückgabe der IDs per fmp://URL – und das alles ohne Plugins oder externe Datenbank.

Highlights aus dem Artikel: • FileMaker-Export als Tab-getrennte Datei • Upload via Insert from URL und cURL • serverseitige Verarbeitung mit PHP • blitzschnelle Filterung im WebViewer • Rückübergabe der gefundenen IDs an FileMaker • robust, portabel und unabhängig von der Datenstruktur

Jetzt nachzulesen im FileMaker Magazin, Ausgabe 07/2025: „Sequentielle Suche – Arbeitsteilung zwischen FileMaker und PHP“ (von Ronny Schrader | MaRo-Programmierung GbR)

Wer Interesse an der Lösung oder einer Demo-Datei hat, darf sich gern bei mir melden.


Kalender mit FileMaker und PHP

Viele Jahre nutze ich nun in FileMaker das Kalendermodul von “Otmar Kramis”. Ein wunderschönes aber extrem komplexes Modul um Kalenderdaten innerhalb von FileMaker in einem WebViewer darstellen zu können. Umfangreiche Berechnungen machen die Einbindung oftmals wenn auch nicht unmöglich, so doch recht schwierig und aufwendig. Deshalb habe ich mich entschlossen etwas schnelles und sehr agiles zu entwickeln. Heraus gekommen ist ein schöner Kalender, mit dynamisch geladenen Daten.

Bildschirmfoto 2025-06-19 um 17.04.57.

Die Kartenansichten gibt es natürlich auch in iPad-Format

Bildschirmfoto 2025-06-19 um 17.14.04.

Für die Nutzung am iPhone gibt es auch eine angepasste Version

Bildschirmfoto 2025-06-19 um 17.15.09.

Die Umsetzung erfolgte mit FileMaker, PHP und JavaScript.


Wenn der WebViewer plötzlich leer bleibt: Daten lieber per Session-ID statt über WebViewer.SetHTML

Nach etlichen Projekten mit WebViewer-Integration in FileMaker kennt man das: Eine aufwendig generierte HTML-Darstellung wird in eine Variable geschrieben und mit WebViewer.SetHTML in das Layout eingebunden. Doch irgendwann, meist nach einem Update, einer Layoutänderung oder schlicht durch zu große Datenmengen, bleibt der WebViewer plötzlich leer. Keine Fehlermeldung, kein Hinweis.

Die Lösung, die sich in meinem Fall bewährt hat. Statt den HTML-Inhalt direkt aus FileMaker in eine Variable zu übergeben, wird dieser über ein PHP-Skript auf dem Server dynamisch aufgebaut. FileMaker überträgt die Inhalte per POST, der Server speichert sie mit einer eindeutigen Session-ID in einer temporären Datei. Anschließend ruft FileMaker einfach https://meinserver.de/tour.php?session=ava_65df75dca14f8 auf und der WebViewer lädt die fertige Darstellung wie jede andere Webseite auch.

Vorteile dieser Methode:

– Kein Zeichenlimit oder Kodierungsproblem in FileMaker-Variablen – HTML, CSS und JavaScript können deutlich umfangreicher sein – Die Darstellung ist im Browser direkt testbar (z. B. mit ?debug=1) – Die Daten sind temporär gespeichert und nach Ablauf automatisch gelöscht

Bildschirmfoto 2025-06-11 um 18.55.54.

Vorgangsweise: Daten werden per POST an den Server gesendet, dort in einer temporären JSON-Datei abgelegt und über eine Session-ID abrufbar gemacht. Der WebViewer muss dann nur noch die Session-ID in der URL übergeben. Der Server liefert die fertige Darstellung. Also eigentlich wie mit dem Browser.

Dieser Code-Bereich ist das Herzstück für den POST-Empfang. Er übernimmt Daten aus FileMaker, speichert sie temporär als JSON-Datei und gibt eine eindeutige Session-ID zurück. Wenn sonst nach dem FileMaker Befehl -Aus URL einfügen- eine ganze HTML-Strucktur zurückkommt, bekommen wir nur noch die Session-ID zurück. Diese wird dann nur noch an die eigentliche URL der PHP-Datei gehangen. Z.B. so: https://deinserver.de/tour_post_neu.php?session=id123456.7654321.


// POST: Daten speichern und Session-ID zurückgeben
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $postData = array_map('trim', $_POST);
    $sessionId = uniqid('ava_', true);
    $sessionDir = __DIR__ . '/sessions/';
    if (!file_exists($sessionDir)) mkdir($sessionDir, 0755, true);
    file_put_contents($sessionDir . $sessionId . '.json', json_encode([
        'data' => $postData,
        'created' => time()
    ]));
    echo $sessionId;
    exit;
}

Nun wird diese URL (https://deinserver.de/tour_post_neu.php?session=id123456.7654321) im WebViewer aufgerufen. Für die Verarbeitung ist dieser Teil zuständig.


if (isset($_GET['session'])) {
    $sessionFile = __DIR__ . '/sessions/' . $_GET['session'] . '.json';
    if (file_exists($sessionFile)) {
        $sessionData = json_decode(file_get_contents($sessionFile), true);
        if (time() - $sessionData['created'] > 3600) {
            unlink($sessionFile);
            echo "Session abgelaufen";
            exit;
        }
        $postData = $sessionData['data'];
        // hier folgt die HTML-Ausgabe
    }
}

FileMaker aufgefrischt - Aus Alt wird endlich Neu

Nach vielen Jahren im Einsatz wurde es Zeit, die Kartenansicht grundlegend zu überarbeiten. Zwischen Wunsch nach mehr Übersicht und den Grenzen der alten Lösung entstand eine neue, moderne Oberfläche mit klarer Struktur und deutlich mehr Möglichkeiten.

Die ursprünglich in FileMaker integrierte Google-Maps-Anzeige im WebViewer war in die Jahre gekommen, höchste Zeit für eine grundlegende Neugestaltung. Der Kunde hatte den Wunsch geäußert, deutlich mehr Informationen direkt in der Kartenansicht sichtbar zu machen. In den letzten Monaten investierte ich daher erhebliche Zeit in die datenbasierte Aufbereitung, um trotz wachsender Informationsdichte eine möglichst klare Darstellung zu ermöglichen.

Doch schließlich war ein Punkt erreicht, an dem Aufwand und Ergebnis in keinem sinnvollen Verhältnis mehr standen. Insbesondere das Konzept individueller Google-Maps-Symbole zur Darstellung der beteiligten Mitarbeiter stieß an seine Grenzen. Sobald mehr als zwei Personen pro Auftrag abgebildet werden mussten, wäre die Anzahl benötigter Symbolvarianten explodiert. Zwar hätte dies einen hohen Informationsgehalt geboten, gleichzeitig aber eine technische Komplexität verursacht, die nicht mehr zeitgemäß erschien.

Die neue Oberfläche überzeugt durch zeitgemäßes Design und funktionale Erweiterungen. Suchen, Gruppieren und der direkte Zugriff auf auftragsspezifische Aktionen sind nun nahtlos integriert.

Die bestehende Lösung ist technisch wie gestalterisch überholt. Eine zeitgemäße Anpassung wäre nur mit großem Ressourcenaufwand möglich gewesen und damit nicht mehr wirtschaftlich.


Nach 15 Jahren werde ich auch wieder für das FileMaker-Magazin schreiben.

FMM_200905.pdf 10.

Im Jahr 2009 und 2010 habe ich bereits zwei Artikel für das FileMaker-Magazin veröffentlicht – einem der wenigen deutschsprachigen Fachmagazine, das sich ausschließlich mit FileMaker-Lösungen, Techniken und Praxisbeispielen beschäftigt. Nun, über ein Jahrzehnt später, freue ich mich, wieder einen Beitrag für die Juli-Ausgabe zu schreiben. Beim Durchstöbern alter Unterlagen sind mir sogar die damaligen Bildschirmaufnahmen meiner Artikel in die Hände gefallen – ein schöner Rückblick und gleichzeitig Ansporn für den neuen Beitrag.

FMM_201003.pdf 11.

Listenansichten in FileMaker optimieren/ PHP und FileMaker

Listenansichten in FileMaker optimieren

Nach einigen Jahren und vielen 1000 Datensätzen die neu ins FileMaker-System gekommen sind, war es soweit. Eine spürbare Verschlechterung der Performance beim Aufbau einer extrem komplexen Listenansicht. Diese Ansicht enthält sehr viele Sortierungen, diverse bedingte Formatierungen zum Ein und Ausblenden von Symbolen, Farbgebung etc. Wenn jetzt noch jemand per VPN auf die Datenbank zugreifen wollte, so konnte es einige Zeit dauern bis die Arbeitsfähigkeit hergestellt war. Dabei wurde die Struktur schon ohne Formeln entwickelt.

Die schnellste und effektivste Lösung. Alles wird über ein WebViewer abgewickelt. Betritt der User das Listen-Layout wird ein Serverscript gestartet, sammelt alle FileMaker Daten und überträgt diese dann an ein PHP-Script. Bruchteile später, steht die Liste schon zum arbeiten bereit. Da die Liste nur mit Java-Script arbeitet, sind alle Aktionen sehr schnell.

Die Daten werden mithilfe eines FileMaker-Skripts vorbereitet und mit Insert from URL an eine PHP-Datei auf dem Server geschickt. Der Request erfolgt als klassischer application/x-www-form-urlencoded-POST-Aufruf. Der Server nimmt die Daten entgegen, bereinigt sie, zerlegt ggf. Pipe-getrennte Listen, und speichert sie in einem assoziativen Array zur weiteren Verarbeitung.

<?php
// Daten säubern
function cleanData($value) {
    return trim($value);
}

// Pipe-Werte aufspalten (z. B. '4711|4712|4713')
function processPipeSeparatedValues($value) {
    return array_map('trim', explode('|', $value));
}

// POST-Verarbeitung starten
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $postData = array_map('cleanData', $_POST);
    // Weiterverarbeitung folgt...
}
?>

Auf der FileMaker-Seite wird der Post so aufbereitet

Bildschirmfoto 2025-05-28 um 08.00.57.

Das PHP-Skript erzeugt eine strukturierte HTML-Tabelle, die über CSS und JavaScript erweitert wird: Sticky-Header, Hover-Effekte, Icons, Kartenintegration – alles dabei. Dank JavaScript lassen sich die Einträge mit einem Klick sortieren: Nach PLZ, Straße oder Kategorie. Auch Gruppierungen sind möglich, z. B. nach Stadtvierteln oder Bezirken, die dynamisch über Google Maps Geocoding ermittelt werden.

function sortByPLZ() {
    const table = document.querySelector("table");
    const tbody = table.querySelector("tbody");
    const rows = Array.from(tbody.querySelectorAll("tr"));

    // Entferne alte Gruppenköpfe
    document.querySelectorAll(".plz-header").forEach(row => row.remove());

    // Sortiere Zeilen nach PLZ (Spalte 12, also index 12)
    rows.sort((a, b) => {
        const plzA = a.cells[12].textContent.trim();
        const plzB = b.cells[12].textContent.trim();
        return plzA.localeCompare(plzB, "de", { numeric: true });
    });

    // Neue Gruppierung einfügen
    let currentPLZ = "";
    rows.forEach(row => {
        const plz = row.cells[12].textContent.trim();
        if (plz !== currentPLZ) {
            currentPLZ = plz;
            const headerRow = document.createElement("tr");
            headerRow.className = "plz-header";
            const headerCell = document.createElement("td");
            headerCell.colSpan = row.cells.length;
            headerCell.textContent = "PLZ: " + plz;
            headerRow.appendChild(headerCell);
            tbody.appendChild(headerRow);
        }
        tbody.appendChild(row);
    });
}

In dieser Ansicht wird unter anderem die Entfernung zu den nächsten Standorten ermittelt. Nach erfolgter Sortierung ist es sehr schnell möglich Aufträge zu verketten bei minimierter Fahrzeit. In dieser Ansicht aber nur berechnet über die Haversinsche Formel. Aber es ist ein extrem schneller Anhaltspunkt um Aufträge in Gruppen zusammenzufassen.

Bildschirmfoto 2025-05-27 um 13.37.18.

Besonders charmant: Das ganze geht auch über die Google Maps API. Die Ansicht dann über Google Maps.

Bildschirmfoto 2025-05-27 um 13.39.18.

Über das InfoWindows-Fenster lassen sich unendlich viele Informationen einblenden. In meinem Fall kann aus dieser Perspektive schon die Tourenzusammenstellung erfolgen. Es wird die Arbeitszeit ermittelt und kenntlich gemacht. Eine implementierte Fahrzeiten-Anzeige hat sich für Berliner-Verhältnisse als Unsinnig herausgestellt. Zu viele Verkehrsänderungen, zu viel Stau, in diesem Fall bedarf es der Erfahrung von Mitarbeitern und Disponenten.

Bildschirmfoto 2025-05-27 um 13.40.07.

Wichtig, ist natürlich auch die Sequentielle-Suche. Diese kann natürlich wie schon einmal berichtet, auch in normalen FileMaker-Listen, Anwendung finden.

Bildschirmfoto 2025-05-27 um 13.44.17.

Eine klassische FileMaker angelehnte Suche fehlt natürlich auch nicht. Hier lassen sich verschieden Kriterien verbinden und ermöglichen eine flexible Suche, ähnlich der klassischen FileMaker-Suche.

Bildschirmfoto 2025-05-28 um 12.24.44.

Das ich im Regelfall innerhalb von FileMaker immer Arbeitslayouts nutze, die im Hintergrund bei -30000 Pixel arbeiten, kann ich aus dem WebViewer heraus, alle FileMaker Script nutzen, die im Vorfeld genutzt wurden. Sie bekommen die Parameter in einer etwas anderen Form, meist als Liste. Somit ist der Aufwand auf der FileMaker-Seite überschaubar.

Fehlerbehandlung und Fallbacks

Natürlich kann nicht immer alles glattlaufen, etwa wenn der Server nicht erreichbar ist oder die Daten aus FileMaker unvollständig übertragen werden. Für diesen Fall habe ich einen einfachen Mechanismus eingebaut. Wenn keine oder fehlerhafte Daten ankommen, zeigt das Skript entweder eine Hinweisbox oder einen minimalen Fallback-Inhalt an. Dabei ist es wichtig, am Anfang der Datei gleich zu prüfen, ob zentrale POST-Werte gesetzt wurden. Gerade bei VPN-Nutzern oder instabilen Mobilverbindungen ist das hilfreich, der Nutzer bekommt sofort Rückmeldung, statt auf eine leere Seite zu starren.

if (!isset($_POST['touren']) || empty($_POST['touren'])) {
    die("<div class='error'>Keine Daten empfangen. Bitte erneut versuchen.</div>");
}

Unterschied zwischen FileMaker-Client und Server

Eine kleine, aber entscheidende Stolperfalle hat mich bei diesem Projekt einige Nerven gekostet. Während der gesamte Aufbau der Liste über den FileMaker Pro Client reibungslos funktionierte, lief das gleiche Script nicht mehr, wenn es über ein Server-Script (FileMaker Server) angestoßen wurde. Die WebViewer-Seite blieb leer. Kein Fehler, kein Hinweis, einfach nichts.

Nach längerer Analyse stellte sich heraus, die Anzahl und Verschachtelungen der DOM-Elemente war der Grund. Im Client lief das Rendering noch sauber durch, aber der FileMaker Server scheint bei der Generierung und Übergabe des WebViewers, speziell in Kombination mit „Insert from URL“ -> WebViewer -> HTML-Rendering, empfindlicher zu reagieren. Besonders bei vielen verschachtelten div-Containern, Tabellen-Inlays und Icon-Ebenen war Schluss.

Die Lösung war eher pragmatisch als elegant, ich habe den DOM deutlich verschlankt, viele dekorative Elemente entfernt oder durch schlankere Varianten ersetzt. Statt

mit drei Ebenen für Rahmen, Schatten und Hover, verwende ich jetzt.

<tr class="hover">
    <td>4711</td>
    <td>Berlin</td>
    <td>…</td>
</tr>

Und auch bei Zusatzinfos im InfoWindow der Google Maps Ansicht wurde auf alles Überflüssige verzichtet. Das Resultat, die Darstellung läuft jetzt reibungslos auch bei serverseitiger Übergabe, ohne dass der WebViewer hängen bleibt oder gar leer bleibt.

Was bleibt nach dieser Umstellung? Ganz klar, die WebViewer-Lösung ist ein echter Gamechanger für große, komplexe Listenansichten in FileMaker. Die Performance ist kaum vergleichbar mit der klassischen Layoutdarstellung, besonders dann, wenn Sortierungen, Gruppierungen und visuelle Hilfsmittel wie Karten gebraucht werden. Eine HTML-Tabelle mit JavaScript schlägt hier jedes FileMaker-Layout um Längen.


Büro ist fertig…

Nach drei Tagen Arbeit, das neue - alte Büro ist fertig

IMG 20250427 WA0002. IMG 20250427 WA0009.