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
    }
}