Datenbanksynchronisation Venelina Jordanova Uwe Habermann [email protected] [email protected] 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 = www.outsourcingitservices.net * 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 14.00 Uhr geht es weiter