OBS/App/dev docs: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
{{ZugriffOBS}} | |||
{{Vorlage:App}} | {{Vorlage:App}} | ||
=App Entwickler-Dokumentation= | =App Entwickler-Dokumentation= |
Version vom 5. Juni 2018, 08:56 Uhr
<accesscontrol>Programmierer</accesscontrol>
- System Überwachung
- DEP deaktivieren
- Darstellung unter Windows 7
- Einwahl auf Windows 2000 Server
- Preislisten
- Datenbank Sicherung
- Customize
- Zentrale
- MySQL Korrekturen
- Support Macro
- Service Debug
- Historienprotokoll (Datenänderung OBS)
- Fernwartungsprobleme
- Startparameter
- Fehler beim Kassenabschluss
- Diverse Informationen
- A ras.pbk
- B Command Line Interpreter
- C File Zilla Benutzer XML erzeugen
- D1 OBS_UPDATE.EXE zum OBS Update Server hochladen
- D2 SUPPORT_MACRO zum OBS Update Server hochladen
- H1 Remote Service Protokoll-Übersicht (Alles)
- H Remote ServiceProtokoll-Übersicht
- I Remote Service Commands
- I1 (Admin) Globaler Hinweis für Updates
- J Liste der OBS Updates
- K Angemeldete Service Firmen
- L Systeminformationen einlesen
- M Kundendaten anzeigen
- M1 Kundendatenbankinformationen anzeigen
- N Kundendaten einlesen
- O Kunden-Update Informationen anzeigen
- P Modul Registrierung OBS
- Q App Verwaltung
- S1 Firmen Statistik Protokolle OBS
- S2 Statistik Notfallkassen
App Entwickler-Dokumentation
globale UID
Anforderung
Die UID (sys_uid) muss pro Gerät eindeutig sein damit ein Datensatz eindeutig identifiziert werden kann. Dazu wird die Uid in der Tabelle uniquenr gespeichert. Auf App-Seite erstellte UID's beginnen alle mit "A" damit es keine Überscheidungen mit OBS-UID's gibt.
Problem
Durch die Synchronisation wird die Datenbank für Mobilgeräte regelmäßig (Standard 30 Tage) neu erstellt. Dadurch wird auch die Tabelle uniquenr überschrieben und ein neuer Datensatz kann dieselbe UID bekommen wie ein bereits existierender Datensatz.
Lösung
Dafür haben wir eine doppelte Sicherheitsmechanik:
1. Bei der Erzeugung einer neuen UID in der App wird die UID zusätzlich in die lokale Konfigurationsdatei (INI) geschrieben. Beim Start der App wird die INI ausgelesen und falls der Wert größer ist als der Eintrag in uniquenr wird er ersetzt.
2. Da in bestimmten Fällen auch die INI gelöscht werden kann (Neuinstallation, Datenspeicher löschen, etc.) brauchen wir auch dafür eine Sicherheit da falsche UID's das gesamte System kompromitieren würden. Bei jeder Datenübertragung (App zu OBS) wird in das Changelog zusätzlich der aktuelle Wert aus uniquenr geschrieben. Bei der Synchronisation der Daten wird der Wert in die Tabelle app_uidmatch mit dem Typ "glb" übernommen. (Die Tabelle app_uidmatch gehört zum statischen Block der Synchronisation (TODO link zur erklärung)). Beim Start der App wird zusätzlich zur INI also auch der Wert aus app_uidmatch geprüft. Ist dieser Wert größer als DB und INI (sprich beides wurde gelöscht) wird der Wert aus app_uidmatch nach uniquenr übernommen plus einen Sicherheitsinterval (erstmal 5000). Der Sicherheitsinterval ist nötig da übertragene Daten evtl. noch nicht synchronisiert wurden und damit der Wert in app_uidmatch noch nicht auf dem neuesten Stand ist.
betroffene Methoden
Base.App -> TxAppLib.RegisterId(const nId: Int64); Base.App -> TAppUidMatch.SetGlobalUid(oMyDb: TxDB): Boolean; Obs.Initialize -> TxApp._SetGlobalUid(); Obs.System -> TxSystem.RegisterUid(const nId: Int64);