Datenaustausch zwischen FileMaker und MySQL

  • View
    59

  • Download
    0

Embed Size (px)

DESCRIPTION

Datenaustausch zwischen FileMaker und MySQL. FileMaker Konferenz2010. Lesen, Vergleichen , Schreiben. FileMaker Konferenz 2012 Salzburg www.filemaker-konferenz.com. Struktur. Szenario: FileMaker-Runtime und MySQL-Server Beispiel MVB3 Beispiel Litlink Lizenz beachten! Was brauchen wir? - PowerPoint PPT Presentation

Transcript

FileMaker Konferenz 2010

Datenaustausch zwischen FileMaker und MySQLLesen, Vergleichen, SchreibenFileMaker Konferenz2010

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comFileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLStrukturSzenario: FileMaker-Runtime und MySQL-ServerBeispiel MVB3Beispiel LitlinkLizenz beachten!Was brauchen wir?FileMaker AdvancedPHP-PluginsMySQLArbeiten mit FileMaker PHP am Beispiel SmartpillVerschiedene Arten, PHP-Code zu integrieren Script, Feldwert, Custom Function, externe FunktionDen Function-Maker nutzenFunktionen erstellenUpdate zur Laufzeit via URL

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLStrukturAufbau der SQL-DatenbankDen Datenabgleich organisierenWarum ein Transfermodul?Was sind neue Daten?Protokoll einrichtenDatenstrukturen vergleichenDaten zum SQL-Server schickenDaten vom SQL-Server holenKonflikte lsenDaten schreibenProtokoll abschliessen

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLSzenarioMVB3: Teamsoftware fr die Mtter- und VterberatungFileMaker RuntimeGleichzeitige Erfassung und Bearbeitung von Daten auf diversen RechnernDatennutzung soweit separat, dass in der Praxis keine Konflikte zu erwarten sindDatenabgleich mit MySQL-Server

Litlink: Wissensmanagement fr Geisteswissenschaftler mit Web-AnwendungFileMaker Runtime oder VollversionErfassung alternierend auf verschiedenen Rechnern des gleichen Users oder in der WeboberflcheProjektfreigabe fr andere UserDatenabgleich mit MySQL-Server

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLLizenz beachtenKeine Netzwerk-Funktion fr Runtime nachbauen

"All use of the Runtime and Runtime Solutions must be on a standalone basis only. You are prohibited from using the Runtime with any middleware, application server, CGI, or other software or technology that allows more than a single client to access the Runtime."FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLWas brauchen wir?FileMaker natrlichFileMaker Advanced dringend empfohlen (Data Viewer!)Ein PHP-PluginMySQL (>> XAMP)FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLPHP-PluginsMonkeybread MBS SQL Connectionhttp://www.monkeybreadsoftware.deUmfangreicher Befehlssatz

Scodigo Smartpillwww.scodigo.comStellt Umgebung fr PHP zur Verfgung

360works ScriptMasterwww.360works.comGroovy (Java) statt PHP

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLMySQL Testumgebung einrichtenVirtuelle Maschine, Website, ServerXampp verwenden: http://www.apachefriends.org/de/xampp.html

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLPHP-Code: ArbeitsvariantenCode direkt im ScriptCustom Functions nutzenMit dem Smartpill Function Maker arbeitenFileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLCode direkt im ScriptProbleme mit AnfhrungszeichenFeldname und Tabellennamen in Anfhrung "Feldname"" im Text \" \"Feldname\"\" im Text \\\" \\\"Feldname\\\"

Feldwert in Hochkomma ID = '34523'Berechneter Wert \\\"_pk_GUID\\\" = '" & $ID & "'

Variable setzen [$table; Wert:GetValue( Get( ScriptParameter ) ; 1 )]Variable setzen [$ID; Wert:GetValue( Get( ScriptParameter ) ; 2 )]Variable setzen [$Command; Wert:"echo fm_sql_select(\"SELECT count(1) FROM \\\"" & $table & "\\\" WHERE \\\"_pk_GUID\\\" = '" & $ID & "'\") ;" ]Variable setzen [$$SQL_Result; Wert:PHP_Execute ( $Command)]Aktuelles Script verlassen [$$SQL_Result]

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLCode in Custom FunctionsBeispiel 1: Temporren Pfad ermittelncf.GetUserTmpFolder: PHP_Execute( "echo FM_TEMPORARY_PATH;" )

Beispiel 2: VerschlsselungCf.Encode_Base64:

Parameter( Text, PW)PHP_Execute ( " $cipher = MCRYPT_RIJNDAEL_128; $key = hash('md5', '" & PW & "'); $iv_size = mcrypt_get_iv_size($cipher, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $crypt_text = mcrypt_encrypt($cipher, $key, '" & Text & "', MCRYPT_MODE_ECB, $iv); echo base64_encode($crypt_text);")FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLFunction MakerCode ohne umstndliche AnfhrungszeichenPackage variables Sauberer CodeKontrollierte bergabe von ParameternFehlerbehandlungTestumgebung

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLFunktionsbibliotheken erstellenDen Function-Maker nutzenTests definierenSets erstellenVersion-Funktion nutzen

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLUpdate zur Laufzeit ladenLaden aus lokalen DateienSetzeVar[ $Result ; Value:PHP_LoadFunctions ]

Laden via URLSetzeVar[ $result; Value:PHP_LoadFunctionsFromURL ( "http://www.beispiel.ch/xml/PHPx_Functions.xml" ) ]FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLDen Datenabgleich organisierenFileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLAufbau der SQL-DatenbankIn allen FM-Tabellen:s_ChanceLocal_n - Wert "1" wenn lokal gendert

In Global-Tabelle:d_LLwebLastsyncNo_ng Nummer des letzten abgeschlossenen Synchsd_LLwebNextsyncNo_ng Nummer des laufenden Synchsd_LLwebLastDate_tg - Zeitstempel letzter AbgleichTabellen enthalten immer alle Feldnamen, die in der Geschichte des Projekts existierten Import funktioniert immer mit Option "Gleiche Feldnamen"Gleiche Tabellen- und Feldnamen wie in FileMaker verwendenZustzliche Tabellen fr Metadaten: web_global, web_synchlogSynchnummer: Sitzungsnummer des Datenabgleich-Vorgangs in jedem DatensatzWebnderung: Timestamp von Upload oder Bearbeitung im WebFileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLWarum ein Transfermodul?SicherheitUpdate-Erwgungen: Aktualisierung unabhngig von KundendatenAnpassungen der Daten vor dem Import & ExportFlexibilitt Import aus verschiedenen FremdsystemenFileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLAblauf des AbgleichsTransfermodul leerenNeue Daten lokal identifizierenDatenset in das Transfermodul ladenDaten zum SQL-Server schickenTransfermodul leerenNeue Daten auf Server identifizierenDaten vom Server holenDaten im Transfermodul aufbereitenDaten nach Litlink schreibenFileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLWas sind neue DatenUpload: Zeitstempel letzte lokale nderung > Letzter Abgleich UNDs_ChangeLocal_n = 1

Download: Synchnummer SQL-Datensatz > Synchnummer letzter Abgleich ODER( Zeitstempel Webnderung > Zeitstempel letzter Abgleich UNDSynchnummer SQL-Datensatz Synchnummer letzter Abgleich)

"Pingpong" verhindern:Upload nur Elemente, die auf diesem Rechner bearbeitet wurdenGleichzeitiger Upload mehrerer Clients ist mglichFileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLRechte des Users prfenPHPx_SQL_CheckUserAccount:

$user = fm_get_parameter('user');$pwd = fm_get_parameter('pwd');()

$SQL_connect= mysql_connect($server,$account,$password); if( $SQL_connect===false) { errorHandler(SQL_ERR_COULD_NOT_CONNECT, 'Database: ' . $db); return ; }mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error());$user = mysql_real_escape_string( $user);$pwd = mysql_real_escape_string( $pwd);$query = "SELECT count(1) as Counter FROM Adressen WHERE d_Email_t='".$user."' and d_Passwort_t='".$pwd."' and d_active_i='1'";$res = mysql_query($query);if(!empty($res)){ $row = mysql_fetch_assoc($res); echo $row['Counter'];}FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLLetzte Sitzungsnummer holenPHPx_SQL_GetSynchNo:

mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error());$query= "SELECT * FROM Adressen WHERE d_Email_t='".$user."' and d_Passwort_t='".$pwd."' and d_active_i='1'";$res= mysql_query($query);$iad= 0;while($row = mysql_fetch_assoc($res)){ $litdat_ID = $row['_pk_guid']; $litdat_lastsynch = $row['d_SynchId_n']; $iad++; echo $litdat_ID."
"; echo $litdat_lastsynch;

}

if( $iad!=1) { echo 'Error'; return ; }FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLund neue Sitzungsnummer schreibenPHPx_SQL_SetServerSynchNo:

$sid = fm_get_parameter('sid');mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error());$user = mysql_real_escape_string( $user);$pwd = mysql_real_escape_string( $pwd);$query = "UPDATE Adressen SET d_SynchId_n='".$sid."',d_LastUploadId_n='".$sid."' ,d_LastUpload_t=now()WHERE d_Email_t='".$user."' AND d_Passwort_t='".$pwd."'";$res = mysql_query($query);FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLDie ganze bung im FM-ScriptVariabl