Offline & Synchronisierung
Florian ist als PWA (Progressive Web App) gebaut und arbeitet auch dann weiter, wenn gerade keine Verbindung zum Server besteht — typisch für die Inventur im Funkloch des Gerätehauses oder unterwegs mit dem Diensthandy. Erfasste Änderungen werden zwischengespeichert und automatisch übertragen, sobald wieder eine Verbindung da ist. Diese Seite erklärt, wie das technisch funktioniert und was Sie tun, wenn Florian einen Konflikt meldet.
Hinweis: Offline-Betrieb setzt voraus, dass die PWA einmal bei bestehender Verbindung geladen wurde. Für den vollen Funktionsumfang auf dem Smartphone installieren Sie Florian als App (Menü des Browsers → „Zum Startbildschirm hinzufügen" bzw. „Installieren").
Wie die PWA offline arbeitet
Florian nutzt zwei Bausteine des Browsers, damit die Oberfläche auch ohne Netz benutzbar bleibt:
- Service-Worker — ein kleines Programm, das der Browser im Hintergrund hält. Es speichert die App selbst (Oberfläche, Icons, Logik) zwischen und liefert sie beim nächsten Start auch ohne Verbindung aus. Er kümmert sich außerdem um die App-Aktualisierung (siehe unten).
- IndexedDB — eine lokale Datenbank direkt im Gerät. Hier legt Florian die zuletzt geladenen Daten ab (z. B. den Gerätebestand einer Inventur), damit Sie sie offline lesen und bearbeiten können.
So bleibt Florian offline arbeitsfähig:
- Beim ersten Aufruf mit Verbindung installiert der Browser den Service-Worker und lädt die App-Dateien in den Cache.
- Die Daten, die Sie für Ihre Aufgabe benötigen, werden in die lokale IndexedDB geladen.
- Fällt die Verbindung weg, bedient der Service-Worker die Oberfläche aus dem Cache und liest die Daten aus der IndexedDB — Sie merken im Idealfall keinen Unterschied.
- Ein Verbindungs-Indikator in der Oberfläche zeigt, ob Florian gerade online oder offline arbeitet.
Achtung: Offline können Sie nur mit den Daten arbeiten, die zuvor geladen wurden. Datensätze, die Sie offline noch nie geöffnet hatten, stehen nicht zur Verfügung. Planen Sie vor dem Gang ins Funkloch (z. B. Inventur) den benötigten Bestand einmal bei Verbindung durchzusehen, damit er lokal vorliegt.
Die Outbox für Schreibvorgänge
Änderungen, die Sie offline vornehmen — ein neues Gerät, ein geänderter Inventur-Status, eine erfasste Anwesenheit — werden nicht sofort verworfen und nicht sofort verschickt, sondern in einer lokalen Outbox (Ausgangskorb) gesammelt. Die Outbox liegt ebenfalls in der IndexedDB des Geräts.
- Jeder offline ausgeführte Schreibvorgang landet als Eintrag in der Outbox und wird in der Oberfläche sofort angezeigt, als wäre er bereits gespeichert (optimistische Anzeige).
- Die Outbox behält die Reihenfolge Ihrer Änderungen bei, damit sie später in derselben Abfolge auf dem Server ankommen.
- Ein Zähler zeigt an, wie viele Änderungen noch auf Übertragung warten. So sehen Sie jederzeit, ob alles synchronisiert ist.
Hinweis: Solange Änderungen in der Outbox stehen, sind sie ausschließlich auf diesem Gerät sichtbar. Erst nach erfolgreicher Synchronisierung erscheinen sie für alle anderen Benutzer. Schließen Sie die App nicht dauerhaft und löschen Sie die Browserdaten nicht, bevor die Outbox geleert ist — sonst gehen noch nicht übertragene Änderungen verloren.
Synchronisierung bei Verbindung
Sobald das Gerät wieder online ist, überträgt Florian die Outbox automatisch zum Server. Ein manuelles Anstoßen ist im Normalfall nicht nötig.
- Der Service-Worker erkennt, dass wieder eine Verbindung besteht.
- Florian sendet die Outbox-Einträge in ihrer ursprünglichen Reihenfolge an den Server.
- Der Server verarbeitet jede Änderung und meldet Erfolg oder Konflikt zurück.
- Erfolgreich übernommene Einträge werden aus der Outbox entfernt; der Zähler sinkt.
- Anschließend lädt Florian den aktuellen Serverstand nach, damit die lokale Anzeige wieder mit dem Server übereinstimmt.
Der Server ist immer die maßgebliche Quelle („Server ist Wahrheit"). Ihre Florian-Instanz auf dem Server der Wehr hält den verbindlichen Datenbestand; die Geräte sind Arbeitskopien, die sich mit ihm abgleichen. Dadurch führt der Betrieb mehrerer Geräte (PC, Diensthandy, Zebra-Scanner) nicht zu auseinanderlaufenden Datenständen — alle gleichen sich gegen dieselbe zentrale Instanz ab.
Hinweis: Bricht die Verbindung während der Übertragung ab, ist das unkritisch: Bereits bestätigte Einträge sind übertragen, der Rest bleibt in der Outbox und wird beim nächsten Verbindungsaufbau erneut versucht.
Konfliktauflösung
Ein Konflikt entsteht, wenn derselbe Datensatz in der Zwischenzeit auf dem Server verändert wurde, während Ihre Offline-Änderung noch in der Outbox lag — etwa weil ein anderes Mitglied dasselbe Gerät bearbeitet hat. Florian erkennt solche Fälle zuverlässig und übernimmt nichts stillschweigend.
So erkennt Florian Konflikte
Jeder Datensatz trägt eine Versionskennung (RowVersion) und einen Änderungszeitstempel. Bei der Synchronisierung vergleicht der Server die Version, auf der Ihre Offline-Änderung beruht, mit der aktuellen Version im Datenbestand:
| Situation | Verhalten |
|---|---|
| Version stimmt überein | Änderung wird übernommen, RowVersion wird hochgezählt |
| Serverstand ist neuer als Ihre Grundlage | Konflikt — die Änderung wird nicht automatisch überschrieben, sondern zur Klärung angezeigt |
| Datensatz wurde serverseitig gelöscht | Konflikt — Sie entscheiden, ob neu angelegt oder verworfen wird |
Weil der Abgleich über die RowVersion läuft und nicht allein über die Uhrzeit, funktioniert die Erkennung auch dann, wenn die Uhr eines Geräts nicht exakt gestellt ist. Der Zeitstempel dient zusätzlich der Nachvollziehbarkeit im Audit-Log.
Konflikte ansehen und lösen
Konflikte gehen nie verloren und blockieren die übrige Synchronisierung nicht — die konfliktfreien Änderungen der Outbox werden normal übertragen, nur die betroffenen Einträge bleiben zur Entscheidung liegen.
- Florian zeigt die offenen Konflikte in einer Übersicht an und weist im Verbindungs-Indikator darauf hin.
- Öffnen Sie einen Konflikt: Florian stellt Ihre Version und die aktuelle Serverversion gegenüber und hebt die abweichenden Felder hervor.
- Entscheiden Sie je Konflikt:
- Server übernehmen — Ihre Offline-Änderung wird verworfen, der Serverstand bleibt.
- Meine Änderung übernehmen — Ihr Wert überschreibt den Serverstand (auf Basis der jetzt aktuellen Version).
- Zusammenführen — sofern die Änderungen unterschiedliche Felder betreffen, übernehmen Sie je Feld die passende Seite.
- Nach der Entscheidung wird der Eintrag mit der aktuellen
RowVersionan den Server gesendet und aus der Konfliktliste entfernt.
Jede Konfliktentscheidung wird im Audit-Log festgehalten (wer hat wann welche Version übernommen), sodass die Auflösung nachvollziehbar bleibt.
Achtung: Wählen Sie „Meine Änderung übernehmen", überschreiben Sie damit die zwischenzeitliche Änderung einer anderen Person. Prüfen Sie in der Gegenüberstellung, ob dabei keine wichtige Information verloren geht — im Zweifel führen Sie die Werte feldweise zusammen.
App-Updates der PWA
Neue Programmversionen erreichen die Geräte ohne manuelle Installation. Aktualisiert sich die Florian-Instanz auf dem Server (siehe Updates einspielen), holt der Service-Worker die neue Oberfläche beim nächsten Start automatisch nach — es ist kein Rollout pro Gerät nötig.
- Der Service-Worker bemerkt eine neue Version der App-Dateien.
- Er lädt sie im Hintergrund und meldet: „Neue Version verfügbar".
- Beim nächsten Neuladen bzw. nach Bestätigung wird die neue Oberfläche aktiv.
Hinweis: Übertragen Sie eine ausstehende Outbox möglichst, bevor Sie ein App-Update aktivieren. So stellen Sie sicher, dass offline erfasste Änderungen sicher auf dem Server angekommen sind, bevor die Oberfläche neu geladen wird.
Siehe auch
- Geräte und Prüffristen — Inventur und Barcode-Erfassung, der Hauptanwendungsfall für den Offline-Betrieb
- Selbstverwaltung (Mitglieder-Self-Service) — eigene Daten am Handy pflegen
- Updates einspielen — wie Server-Updates und PWA-Aktualisierung zusammenspielen