Uwe Habermann Datenbanksynchronisation Venelina Jordanova
Synchronisierung * Wofür brauche ich das? * Datenabgleich mit Filialen * Datenabgleich mit Vertretern * Datenabgleich mit Außenstellen * Wenn Online-Verbindung nicht (immer) möglich ist
Synchronisierung * Features * Mehrere Datenbanken in einem Ordner oder in verschiedenen Ordnern * Freie Tabellen * Berücksichtigung von Berechtigungen durch eigenen Code möglich * Unterstützung von Löschungen
Wie geht das? * FTP Protokoll * 1 Server – viele Clients * Austausch von Ini Dateien * Austausch von Zip Dateien mit Daten * Parallelbetrieb von Server und Client
Voraussetzungen beim Server * Ab Windows 2000 * IIS und FTP Server * Benutzerkonto mit FTP Zugriffsrechten * Die Zungangsdaten sind den Clients bekannt * Ordner mit FTP Zugriffsrechten * Dienst installieren * Dll registrieren
Installation des Servers * Benutzerkonto mit FTP Zugriffsrechten anlegen * Ordner mit FTP Zugriffsrechten anlegen * Dienst installieren * Dll registrieren * Server.ini Datei anlegen
Server.ini [FOLDERS] CLIENTINIFOLDER=C:\Inetpub\ftproot\FTPSync\CLIENTINI SERVERINIFOLDER=C:\Inetpub\ftproot\FTPSync\SERVERINI CLIENTDATAFOLDER=C:\Inetpub\ftproot\FTPSync\CLIENTDATA SERVERDATAFOLDER=C:\Inetpub\ftproot\FTPSync\SERVERDATA CLIENTCONFIRMATIONFOLDER=C:\Inetpub\ftproot\FTPSync\CLIENTCONFIRMATION SERVERCONFIRMATIONFOLDER=C:\Inetpub\ftproot\FTPSync\SERVERCONFIRMATION CREATEDATABASEPRGFOLDER=DATABASES [\FOLDERS] [DATABASES] [C:\FTPSYNC\DATA\vfp],[vfp] [\DATABASES] [TIMER] SYNCHRONIZATIONEXE=C:\FTPSync\FTPSyncServer.exe *!* Timeouts and delay are in seconds INITIMEOUT=60 DATATIMEOUT=60 CONFIRMATIONTIMEOUT=60 DELAY=0.5 *!* In log files it will be written if only the file exist SERVICELOGFILE=C:\TEMP\SYNCSERVICE.LOG SERVERLOGFILE=C:\TEMP\SYNCSERVER.LOG [\TIMER]
Voraussetzungen beim Client * Internetverbindung * FTP muss möglich sein (frei in Firewall) * Port konfigurierbar, Standard 21 * Normale VFP 9 Anwendung muss laufen * Ini Datei mit Pfadeinstellungen * Protokollierung in Log Datei möglich
Voraussetzungen beim Client * Die Synchronisierung von gelöschten Datensätzen funktioniert nur, wenn mit Cursoradaptern gearbeitet wird
Server Komponenten * Windows Dienst * Exe Datei? * DLL auf dem Server
Client Komponenten * Klassenbibliotheken * VfxFtpSync.vcx * VfxFtpSyncClient.vcx * VfxFtpSyncClientBase.vcx
Integration in VFPizza * Vorbereitetes Projekt verwenden!
Anforderungen an die Datenbank * Wir empfehlen GUIDs zu verwenden * Feldtyp C(36) * Von der Datenbank vergebene Primärschlüssel werden nicht unterstützt!
Anforderungen an die Datenbank * Es müssen folgende Felder in allen zu synchronisierenden vorhanden sein: * Edt_Date T * Edt_Usr C(36) * Ins_Date T * Ins_Usr C(36) * Del_Flag N(1) * Sync_Date T
Appl.vcx - cFoxAppl *.cDel_Fld = Del_Flag *.lFillEditDateForNewRecords =.T. *.lUseGUIDsKeys =.T. *.lUseUTCTime =.T.
VFXSDef.dbf * Ein Datensatz enthält alle für FTP erforderlichen Einstellungen
VFXSDef.dbf * FtpUrl = * FtpPort = 21 * FtpUpIni = FTPSync/CLIENTINI * FtpDwnIni = FTPSync/SERVERINI * FtpUpData = FTPSync/CLIENTDATA * FtpDwnData = FTPSync/SERVERDATA
VFXSDef.dbf * FtpUpConf = FTPSync/CLIENTCONFIRMATION * Ftpdwnconf = FTPSync/SERVERCONFIRMATION * Ftpuser = * Ftppass =
Start der Synchronisierung * Neues Formular basierend auf cForm * Per Drag&Drop cFtpsyncclient aus VfxFtpSyncClient auf das Formular fallenlassen * Commandbutton auf das Formular ziehen
Start der Synchronisierung * Im Click Ereignis schreiben: llRes = ThisForm.oFtpSyncClient.Execute() Wait Window llRes
Vfxfopen.dbf * Eintrag für das neue Formular hinzufügen
Client.ini [DATABASES] [DATA\vfp],[vfp] [\DATABASES] [TIMER] INITIMEOUT=30 DATATIMEOUT=30 CONFIRMATIONTIMEOUT=30 DELAY=0.5 CLIENTLOGFILE=SYNCCLIENT.LOG [\TIMER]
Jetzt kann getestet werden!
Und jetzt auch noch Code… * VfxFtpSyncClient.vcx * cFtpSyncClient * Kann bei Bedarf angepasst werden * Insbesondere SELECT
Ablauf der Synchronisierung * Ini Upload * Datenaufbereitung beim Server * Datenaufbereitung beim Client * Upload einer Zip Datei * Download einer Zip Datei * Auspacken des Archivs * Integration der Daten in die Datenbank
Das Mittagessen wartet… Um Uhr geht es weiter