Datenaustausch zwischen FileMaker und MySQL

  • Published on
    24-Feb-2016

  • 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-ScriptVariable setzen [$SQL_call; Wert:PHPx_SQL_GetSynchNo ( _DGlobal::d_LLwebuser_tg; _DGlobal::d_LLwebpassword_tg; sys_Globals::s_SQLDB ; sys_Globals::s_SQLServer ; sys_Globals::s_SQLAccount ; sys_Globals::s_SQLPassword )]Wenn [$SQL_Call = "Error"]Aktuelles Script verlassen ["Error: Konnte Synch-Nr. nicht lesen"]SonstVariable setzen [$Result; Wert:Substitute( $SQL_call ; "
" ; )]Variable setzen [$$SQLUserID; Wert:GetValue( $Result ; 1)]Variable setzen [$$SQLLastSynchID; Wert:GetValue( $Result ; 2)]Feldwert setzen [_DGlobal::d_LLwebnextsyncno_ng[]; $$SQLLastSynchID+1]Schreibe nderung Datens./Abfrage [Ohne Dialogfeld]Ende-Wenn

Variable setzen [$SQL_call; PHPx_SQL_SetServerSynchNo ( _DGlobal::d_LLwebuser_tg; _DGlobal::d_LLwebpassword_tg; sys_Globals::s_SQLDB ; sys_Globals::s_SQLServer ; sys_Globals::s_SQLAccount ; sys_Globals::s_SQLPassword ; _DGlobal::d_LLwebnextsyncno_ng)]Wenn [$SQL_Call = "Error"]Aktuelles Script verlassen ["Error: Konnte Synch-Nr. nicht schreiben"]SonstAktuelles Script verlassen ["OK"]Ende-Wenn

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLDatenstrukturen vergleichenStatt hart codiertem Datenaustausch Datenbanken analysieren

Tabellenlisten auslesen & vergleichenFM: Variable Setzen[ $TablesInFM ; "Autoren" & & "Periodikum" & & "Titel" ]

SQL: $TablesInSQL mysql_select_db($db) or die("Selection of database ".$db." failed".mysql_error()); $query = mysql_query("SHOW TABLES"); while($row = mysql_fetch_assoc($query)) { echo $row['Tables_in_'.$db]."
" ; }

Schnittmenge: [$TableList = TrText_SortLines( "-unused" ; TrText_ANDText( "-unused" ; $TablesInSQL ; $$TablesInFM )

FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLDatenstrukturen vergleichenFeldlisten auslesen & vergleichen

Script ausfhren ["fn.Smartpill: Get Fieldlist from MYSQL(List)"]Variable setzen [$Table_sql; Wert:Get(ScriptResult)]Script ausfhren [" fn.Get Fieldlist from Transfer(List)"]Variable setzen [$Table_fm; Wert:Get(ScriptResult)]Wenn [$Table_sql = "Error" or $Table_fm = "Error"] Aktuelles Script verlassen ["Error"]Sonst $Result = Let( [ $list = TrText_SortLines( "-unused" ; TrText_ANDText( "-unused" ; $table_sql ; $table_fm )); $list2 = cf.LinesNotStartingWith( $list ; "x";ValueCount( $list );""); $length = Length($list2) -1]; Left( $list2 ; $length))Aktuelles Script verlassen [$Result]Ende (wenn)FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLDaten zum SQL-Server schickenVariable setzen [$Source; Wert:Get(LayoutTableName)]Schleife (Anfang)Variable setzen [$ID; Wert:Evaluate($Source & "::_pk_guid")]Variable setzen [$Commonfields; Wert:Let( $Fields = cf.SQLInsertCommand ( $Datafields ; "x" ; ValueCount($Datafields) );Left( $Fields; Length( $Fields )-2))]Variable setzen [$Values; Wert:Let($Prevalues = cf.SQLInsertCommandValues ( $Datafields ; "x" ; ValueCount($Datafields)) ;"" & Left( $Prevalues ; Length( $Prevalues )-2))]Variable setzen [$Result;Wert:PHPx_SQL_WriteRecordInSQL_DB ( _DGlobal::d_LLwebuser_tg; _DGlobal::d_LLwebpassword_tg; sys_Globals::s_SQLDB ; sys_Globals::s_SQLServer ; sys_Globals::s_SQLAccount ; sys_Globals::s_SQLPassword ; $$Kontext ; $ID ; $Commonfields ; $Values ; _DGlobal::d_LLwebnextsyncno_ng)]

Variable setzen [$$SQL_error; Wert:PHP_GetLastError]Gehe zu Datens./Abfrage/Seite [Nchste(r); Nach letztem beenden]Schleife (Ende)FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLcf.SqlInsertCommand//Use like: SetField(Field; cf.SQLUpdateCommand ( T1; T2; ValueCount(T1) ))//Params: pT1, pSearch, NpT1

SetzeVars( [line = HoleWert(pT1; NpT1); content = Berechne( line )];

Falls( NpT1 > 1; cf.SQLInsertCommand(pT1; pSearch; NpT1-1)) & Falls( ZeichenLinks(line; Lnge( pSearch )) psearch UND NICHT IstLeer( content ); line & ","))"OrtPLZLandRegion" "Ort,PLZ,Land,Region,"FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLcf.SqlInsertCommandValues//Use like: SetField(Field; cf.SQLInsertCommandValues ( T1; T2; ValueCount(T1) ))//Params: pT1, pSearch, NpT1//cf.SQLInsertCommandValues=

SetzeVars( [line=HoleWert(pT1; NpT1); Str1 = Falls( ZeichenLinks( line ;1 ) = "_" ODER ZeichenRechts(line;2) "_t" ODER ZeichenLinks(line; 10)="d_datentyp" ODER $$UTFSupport 1 ; Berechne( line ) ; cf.CSStoFMText ( LiesAlsCSS( Berechne( line )))); Str2 = Austauschen( Str1 ; "\\" ; "\\\\"); Content = "'" & Austauschen( Str2 ; ["'" ; "''"];["\"" ; "\\\""];["\" ; "\\\"];["\" ; "\\\"];["" ; "\"];["" ; "\"];["\";"\\\"]) & "'"];

Falls( NpT1 > 1; cf.SQLInsertCommandValues(pT1; pSearch; NpT1-1)) & Falls( ZeichenLinks(line; Lnge( pSearch )) psearch UND NICHT IstLeer( Str1 ); content & ","))D_Titel_td_Ort_td_Schlagworte_t (Stdte mit schwierigen NamenN'Djamena) 'Stdte mit schwierigen Namen','','N''Djamena',FileMaker Konferenz 2012 Salzburg

www.filemaker-konferenz.comNicolaus Busch, N. Busch GmbHDatenaustausch mit SQLSQL_WriteRecordInSQL_DB$id ='_pk_GUID';$noempty=false; // print out only non empty fields if(isset($dbtable) && !empty($dbtable)){ $commonfields .=",x_fk_User, s...

Recommended

View more >