FMK2012: FileMaker und Java ...und es öffnen sich neue Welten! von Bernhard Schulz
1. FileMaker und Java
...und es öffnen sich neue Welten!
DI (FH) DI Bernhard Schulz
schubec GmbH
FileMaker Konferenz 2012 Salzburg
www.filemaker-konferenz.com
2. DI (FH) DI Bernhard Schulz
‣ Inhaber und Geschäftsführer der schubec GmbH
‣ Betreiber von FileMakerProfis.de
‣ PHP
‣ Java
‣ Google Web Toolkit
‣ Vaadin
‣ Wicket
‣ SQL Datenbanken
‣ Websecurity
‣ Netzwerktechnik
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
3. Vortragsziel
‣ Klären: Was ist Java?
‣ Was braucht man um Java nutzen zu können?
‣ Die Zugriffsarten
‣ JDBC
‣ FileMaker API 4 Java
‣ Praxisrelevante Beispiele
‣ Der Vortrag ist keine Java-Schulung
‣ Vollständige Codebeispiele in Folien und bei den Beispielen
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
4. Java
‣ Objektorientierte Programmiersprache
‣ SUN / Oracle
‣ Plattformunabhängig
‣ Windows
‣ Mac
‣ Linux
‣ kostenlos
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
5. Zugriffsmöglichkeiten auf FileMaker
‣ Java Database Connectivity (JDBC)
‣ FileMaker API 4 Java
‣ in Entwicklung bei schubec
‣ in Anlehnung an FileMaker API 4 PHP
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
6. JDBC Treiber - woher nehmen?
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
7. JDBC
‣ Wie ODBC für die Java-Welt
‣ FileMaker Server dient als Datenquelle
‣ Java-Programm liest Daten aus oder schreibt Daten in Datenquelle
‣ Extrem schnell!!!
‣ Bei weitem! schneller als FileMaker API 4 PHP
‣ Extrem robust
‣ Einmal eingerichtet, lauft das Ding quasi für immer!
Bild-Quelle: FileMaker ODBC and JDBC Guide
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
8. JDBC
package com.schubec.demo.fmk2012.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class JdbcTest {
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "jdbc";
private static final String PASSWORD = "jdbc";
private static final String PORT = "2399";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
Class.forName("com.ddtek.jdbc.sequelink.SequeLinkDriver")
.newInstance();
String jdbcString = "jdbc:sequelink://" + SERVER + ":" + PORT
+ ";user=" + USERNAME + ";password=" + PASSWORD
+ ";serverDataSource=" + DATABASE;
Connection connection = DriverManager.getConnection(jdbcString);
String sql = "SELECT Thema, Untertitel FROM Themen";
ResultSet resultSet = connection.prepareStatement(sql)
.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("Thema"));
System.out.println(resultSet.getString("Untertitel"));
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
9. JDBC
Verbindungsparameter
package com.schubec.demo.fmk2012.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class JdbcTest {
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "jdbc";
private static final String PASSWORD = "jdbc";
private static final String PORT = "2399";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
Connection-String:
Class.forName("com.ddtek.jdbc.sequelink.SequeLinkDriver")
.newInstance(); FileMaker 10:
jdbc:sequelink://<sequelink host IP
address>:<port>;serverDataSource=<databasename>;DBUser=<databaseusername>;
String jdbcString = "jdbc:sequelink://" + SERVER + ":" + PORT
+ ";user=" + USERNAME + ";password=" + PASSWORD
DBPassword=<databasepassword>
+ ";serverDataSource=" + DATABASE;
Connection connection = DriverManager.getConnection(jdbcString);
FileMaker 11:
jdbc:filemaker://<filemaker host IP address>:<port>/ <databasename>?
String sql = "SELECT Thema, Untertitel FROM Themen";
ResultSet resultSet = connection.prepareStatement(sql)
user=<databaseusername>&password=<databasepassword>
.executeQuery();
while (resultSet.next()) {
FileMaker 12:
System.out.println(resultSet.getString("Thema"));
jdbc:filemaker://<filemaker host IP address>:<port>/<databasename>?
System.out.println(resultSet.getString("Untertitel"));
user=<databaseusername>&password=<databasepassword>
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
10. JDBC
Verbindungsparameter
package com.schubec.demo.fmk2012.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class JdbcTest {
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "jdbc";
private static final String PASSWORD = "jdbc";
private static final String PORT = "2399";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
Connection-String:
Class.forName("com.ddtek.jdbc.sequelink.SequeLinkDriver")
.newInstance(); FileMaker 10:
jdbc:sequelink://fm9.langhofer.net:
String jdbcString = "jdbc:sequelink://" + SERVER + ":" + PORT
2399;user=jdbc;password=jdbc;serverDataSource=fmk2012
+ ";user=" + USERNAME + ";password=" + PASSWORD
+ ";serverDataSource=" + DATABASE;
Connection connection = DriverManager.getConnection(jdbcString);
String sql = "SELECT Thema, Untertitel FROM Themen";
ResultSet resultSet = connection.prepareStatement(sql)
.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("Thema"));
System.out.println(resultSet.getString("Untertitel"));
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
11. JDBC
package com.schubec.demo.fmk2012.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class JdbcTest { JDBC Treiber laden
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "jdbc";
private static final String PASSWORD = "jdbc";
private static final String PORT = "2399";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
Class.forName("com.ddtek.jdbc.sequelink.SequeLinkDriver")
.newInstance();
String jdbcString = "jdbc:sequelink://" JDBC-Treiber: + PORT
+ SERVER + ":"
+ ";user=" + USERNAME + ";password=" + PASSWORD
+ ";serverDataSource=" + DATABASE;
FileMaker 10:
Connection connection = DriverManager.getConnection(jdbcString);
com.ddtek.jdbc.sequelink.SequeLinkDriver
String sql = "SELECT Thema, Untertitel FROM Themen";
ResultSet resultSet = connection.prepareStatement(sql)
FileMaker 11:
.executeQuery();
while (resultSet.next()) {
com.filemaker.jdbc.Driver
System.out.println(resultSet.getString("Thema"));
FileMaker 12:
System.out.println(resultSet.getString("Untertitel"));
System.out.println("===============================");
com.filemaker.jdbc.Driver
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
12. JDBC
package com.schubec.demo.fmk2012.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class JdbcTest { SQL Statement
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "jdbc";
private static final String PASSWORD = "jdbc";
private static final String PORT = "2399";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
Class.forName("com.ddtek.jdbc.sequelink.SequeLinkDriver")
.newInstance();
String jdbcString = "jdbc:sequelink://" + SERVER + ":" + PORT
+ ";user=" + USERNAME + ";password=" + PASSWORD
+ ";serverDataSource=" + DATABASE;
Connection connection = DriverManager.getConnection(jdbcString);
String sql = "SELECT Thema, Untertitel FROM Themen";
ResultSet resultSet = connection.prepareStatement(sql)
.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("Thema"));
System.out.println(resultSet.getString("Untertitel"));
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
13. JDBC
package com.schubec.demo.fmk2012.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class JdbcTest { SQL-Befehl ausführen
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "jdbc";
private static final String PASSWORD = "jdbc";
private static final String PORT = "2399";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
Class.forName("com.ddtek.jdbc.sequelink.SequeLinkDriver")
.newInstance();
String jdbcString = "jdbc:sequelink://" + SERVER + ":" + PORT
+ ";user=" + USERNAME + ";password=" + PASSWORD
+ ";serverDataSource=" + DATABASE;
Connection connection = DriverManager.getConnection(jdbcString);
String sql = "SELECT Thema, Untertitel FROM Themen";
ResultSet resultSet = connection.prepareStatement(sql)
.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("Thema"));
System.out.println(resultSet.getString("Untertitel"));
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
14. JDBC
package com.schubec.demo.fmk2012.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class JdbcTest { Ergebnis ausgeben
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "jdbc";
private static final String PASSWORD = "jdbc";
private static final String PORT = "2399";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
Class.forName("com.ddtek.jdbc.sequelink.SequeLinkDriver")
.newInstance();
String jdbcString = "jdbc:sequelink://" + SERVER + ":" + PORT
+ ";user=" + USERNAME + ";password=" + PASSWORD
+ ";serverDataSource=" + DATABASE;
Connection connection = DriverManager.getConnection(jdbcString);
String sql = "SELECT Thema, Untertitel FROM Themen";
ResultSet resultSet = connection.prepareStatement(sql)
.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("Thema"));
System.out.println(resultSet.getString("Untertitel"));
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
15. JDBC
Ergebnis
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
16. JDBC
‣ Medienfelder können gelesen und geschrieben werden
‣ (Das ist über andere Schnittstellen, zB FM API 4 PHP, nicht möglich!)
File file = new File ("/Users/schube/Pictures/FMK_Logo_2012.gif");
FileInputStream inputstream = new FileInputStream (file);
String sql = "INSERT INTO Medienfeldtest (DasMedienfeld) VALUES(PutAs(?, 'GIFf'))";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
prepareStatement.setBinaryStream (1, inputstream, (int)file.length ());
prepareStatement.execute();
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
17. JDBC - Containerfeld Datentypen
Tabelle-Quelle: FileMaker ODBC and JDBC Guide
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
18. JDBC & Medienfeld - vollständiger Code
package com.schubec.demo.fmk2012.jdbc;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JdbcContainerTest {
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "jdbc";
private static final String PASSWORD = "jdbc";
private static final String PORT = "2399";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
Class.forName("com.ddtek.jdbc.sequelink.SequeLinkDriver")
.newInstance();
String jdbcString = "jdbc:sequelink://" + SERVER + ":" + PORT
+ ";user=" + USERNAME + ";password=" + PASSWORD
+ ";serverDataSource=" + DATABASE;
Connection connection = DriverManager.getConnection(jdbcString);
File file = new File ("/Users/schube/Pictures/FMK_Logo_2012.gif");
FileInputStream inputstream = new FileInputStream (file);
String sql = "INSERT INTO Medienfeldtest (DasMedienfeld) VALUES(PutAs(?, 'GIFf'))";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
prepareStatement.setBinaryStream (1, inputstream, (int)file.length ());
prepareStatement.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
19. JDBC
‣ Abfragen basieren auf Tabellenauftreten
‣ Abfragen werden mittels SQL-Befehle formuliert
‣ FileMaker Tabellen können erzeugt/geändert werden!
‣ CREATE TABLE
‣ ALTER TABLE
‣ CREATE INDEX
‣ DROP INDEX
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
20. JDBC - Datenbankstruktur ändern
sql = "CREATE TABLE T1 (C1 VARCHAR, C2 VARCHAR (50), C3 VARCHAR (1001),C4 VARCHAR
(500276))";
connection.prepareStatement(sql).execute();
sql = "CREATE TABLE T1NN (C1 VARCHAR NOT NULL, C2 VARCHAR (50) NOT NULL, C3 VARCHAR
(1001) NOT NULL, C4 VARCHAR (500276) NOT NULL)";
connection.prepareStatement(sql).execute();
sql = "CREATE TABLE T2 (C1 DECIMAL, C2 DECIMAL (10,0), C3 DECIMAL (7539,2), C4 DECIMAL
(497925,301))";
connection.prepareStatement(sql).execute();
sql = "CREATE TABLE T3 (C1 DATE, C2 DATE, C3 DATE, C4 DATE)";
connection.prepareStatement(sql).execute();
sql = "CREATE TABLE T4 (C1 TIME, C2 TIME, C3 TIME, C4 TIME)";
connection.prepareStatement(sql).execute();
sql = "CREATE TABLE T5 (C1 TIMESTAMP, C2 TIMESTAMP, C3 TIMESTAMP,C4 TIMESTAMP)";
connection.prepareStatement(sql).execute();
sql = "CREATE TABLE T6 (C1 BLOB, C2 BLOB, C3 BLOB, C4 BLOB)";
connection.prepareStatement(sql).execute();
Beispiel-Quelle: FileMaker ODBC and JDBC Guide
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
21. JDBC - Index auslesen
package com.schubec.demo.fmk2012.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class IndexAuslesenTest {
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "jdbc";
private static final String PASSWORD = "jdbc";
private static final String PORT = "2399";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
Class.forName("com.ddtek.jdbc.sequelink.SequeLinkDriver")
.newInstance();
String jdbcString = "jdbc:sequelink://" + SERVER + ":" + PORT
+ ";user=" + USERNAME + ";password=" + PASSWORD
+ ";serverDataSource=" + DATABASE;
Connection connection = DriverManager.getConnection(jdbcString);
String sql = "SELECT DISTINCT "Web Farbe" AS farbe FROM Themen";
ResultSet resultSet = connection.prepareStatement(sql)
.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("farbe"));
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Beispiel-Quelle: FileMaker ODBC and JDBC Guide
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
22. JDBC
‣ Viele weitere SQL-Abfragen möglich!
‣ Abfragen, die mit FileMaker gar nicht
oder
‣ nur extrem kompliziert
‣ möglich wären.
‣ Viel Spass beim SQL-Lernen!
‣ Ist ohnehin für FileMaker Entwickler sehr nützlich!
‣ Zum Beispiel bei der Session
„FM12 - Mit SQL-Kommandos FileMaker Daten lesen - und
schreiben“
‣ von Nico Busch heute um 16 Uhr im Schloss Saal 1!
Beispiel-Quelle: FileMaker ODBC and JDBC Guide
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
23. FileMaker API 4 Java
‣ Basiert auf XML-Schnittstelle des FileMaker Server
‣ Idee von FileMaker API 4 PHP von FileMaker Inc. übernommen
‣ Entwicklung durch schubec GmbH
‣ Lange Erfahrung mit der XML Schnittstelle
‣ Entwicklung von FM-and-PHP im Jahre 2001
‣ Momentan im BETA-Stadium
‣ Veröffentlichungsdatum und Konditionen ungewiss
‣ Bei Interesse bitte an office@schubec.com wenden
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
24. FileMaker API 4 Java
‣ Hat in etwa die gleichen Funktionen und Einschränkungen wie FileMaker
API 4 PHP
‣ Abfragen basieren auf Layouts
‣ Medienfelder können nur gelesen werden
‣ Performance mittelmässig
‣ Benötigt zwingend FileMaker Server
‣ Es können FileMaker Scripts ausgeführt werden!
‣ Basiert auf HTTP Protokoll
‣ kaum Probleme bei Übertragung über Internet
‣ XML-Schnittstelle bei FileMaker Provider weit verbreitet
‣ FileMaker API 4 PHP Programmierer können ganz leicht umsteigen
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
25. FileMaker API 4 Java
package com.schubec.demo.fmk2012.fmapi4java;
import com.schubec.libraries.fmapi4java.FileMaker;
import com.schubec.libraries.fmapi4java.commands.FindAllCommand;
import com.schubec.libraries.fmapi4java.enums.Protocol;
import com.schubec.libraries.fmapi4java.models.Database;
import com.schubec.libraries.fmapi4java.models.Layout;
import com.schubec.libraries.fmapi4java.models.Record;
import com.schubec.libraries.fmapi4java.results.ResultSet;
public class FmApi4JavaTest {
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "web";
private static final String PASSWORD = "web";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
FileMaker fm = new FileMaker(SERVER, Protocol.HTTP, USERNAME, PASSWORD);
Database db = fm.newDatabase(DATABASE);
Layout lay = db.newLayout("Themen");
FindAllCommand command = lay.newFindAllCommand();
ResultSet<Record> result;
result = command.execute();
for (Record record : result.getRecords()) {
System.out.println(record.getField("Thema").getValue());
System.out.println(record.getField("Untertitel").getValue());
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
26. FileMaker API 4 Java
package com.schubec.demo.fmk2012.fmapi4java;
import com.schubec.libraries.fmapi4java.FileMaker;
import com.schubec.libraries.fmapi4java.commands.FindAllCommand;
import com.schubec.libraries.fmapi4java.enums.Protocol;
import
import
import
com.schubec.libraries.fmapi4java.models.Database;
com.schubec.libraries.fmapi4java.models.Layout;
com.schubec.libraries.fmapi4java.models.Record;
Verbindungsparameter
import com.schubec.libraries.fmapi4java.results.ResultSet;
public class FmApi4JavaTest {
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "web";
private static final String PASSWORD = "web";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
FileMaker fm = new FileMaker(SERVER, Protocol.HTTP, USERNAME, PASSWORD);
Database db = fm.newDatabase(DATABASE);
Layout lay = db.newLayout("Themen");
FindAllCommand command = lay.newFindAllCommand();
ResultSet<Record> result;
result = command.execute();
for (Record record : result.getRecords()) {
System.out.println(record.getField("Thema").getValue());
System.out.println(record.getField("Untertitel").getValue());
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
27. FileMaker API 4 Java
package com.schubec.demo.fmk2012.fmapi4java;
import com.schubec.libraries.fmapi4java.FileMaker;
import com.schubec.libraries.fmapi4java.commands.FindAllCommand;
import com.schubec.libraries.fmapi4java.enums.Protocol;
import
import
import
com.schubec.libraries.fmapi4java.models.Database;
com.schubec.libraries.fmapi4java.models.Layout;
com.schubec.libraries.fmapi4java.models.Record;
Befehl (FindAll / Alle aufrufen)
import com.schubec.libraries.fmapi4java.results.ResultSet;
public class FmApi4JavaTest {
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "web";
private static final String PASSWORD = "web";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
FileMaker fm = new FileMaker(SERVER, Protocol.HTTP, USERNAME, PASSWORD);
Database db = fm.newDatabase(DATABASE);
Layout lay = db.newLayout("Themen");
FindAllCommand command = lay.newFindAllCommand();
ResultSet<Record> result;
result = command.execute();
for (Record record : result.getRecords()) {
System.out.println(record.getField("Thema").getValue());
System.out.println(record.getField("Untertitel").getValue());
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
28. FileMaker API 4 Java
package com.schubec.demo.fmk2012.fmapi4java;
import com.schubec.libraries.fmapi4java.FileMaker;
import com.schubec.libraries.fmapi4java.commands.FindAllCommand;
import com.schubec.libraries.fmapi4java.enums.Protocol;
import
import
import
com.schubec.libraries.fmapi4java.models.Database;
com.schubec.libraries.fmapi4java.models.Layout;
com.schubec.libraries.fmapi4java.models.Record;
Befehl ausführen
import com.schubec.libraries.fmapi4java.results.ResultSet;
public class FmApi4JavaTest {
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "web";
private static final String PASSWORD = "web";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
FileMaker fm = new FileMaker(SERVER, Protocol.HTTP, USERNAME, PASSWORD);
Database db = fm.newDatabase(DATABASE);
Layout lay = db.newLayout("Themen");
FindAllCommand command = lay.newFindAllCommand();
ResultSet<Record> result;
result = command.execute();
for (Record record : result.getRecords()) {
System.out.println(record.getField("Thema").getValue());
System.out.println(record.getField("Untertitel").getValue());
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
29. FileMaker API 4 Java
package com.schubec.demo.fmk2012.fmapi4java;
import com.schubec.libraries.fmapi4java.FileMaker;
import com.schubec.libraries.fmapi4java.commands.FindAllCommand;
import com.schubec.libraries.fmapi4java.enums.Protocol;
import
import
import
com.schubec.libraries.fmapi4java.models.Database;
com.schubec.libraries.fmapi4java.models.Layout;
com.schubec.libraries.fmapi4java.models.Record;
Ausgabe
import com.schubec.libraries.fmapi4java.results.ResultSet;
public class FmApi4JavaTest {
private static final String SERVER = "fm9.langhofer.net";
private static final String USERNAME = "web";
private static final String PASSWORD = "web";
private static final String DATABASE = "fmk2012";
public static void main(String[] args) {
try {
FileMaker fm = new FileMaker(SERVER, Protocol.HTTP, USERNAME, PASSWORD);
Database db = fm.newDatabase(DATABASE);
Layout lay = db.newLayout("Themen");
FindAllCommand command = lay.newFindAllCommand();
ResultSet<Record> result;
result = command.execute();
for (Record record : result.getRecords()) {
System.out.println(record.getField("Thema").getValue());
System.out.println(record.getField("Untertitel").getValue());
System.out.println("===============================");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
30. FileMaker API 4 Java
Ergebnis
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
31. JDBC vs. FileMaker API 4 Java
JDBC FMAPI4JAVA (FMAPI4PHP)
Client / Server? Client o. Server Nur Server Nur Server
Protokoll JDBC HTTP HTTP
Geschwindigkeit
Medienfelder lesen
Medienfelder schreiben
Datenbankstruktur ändern
Scripts ausführen
Dokumentation
Verfügbarkeit
Abfragen per SQL-Befehl FM proprietär
Abfragen basieren auf Tabellenauftreten Layouts
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
32. JDBC vs. FileMaker API 4 Java
‣ Was ist besser?
‣ Kommt drauf an...
‣ Unterschiedliche Features
‣ Vorschlag: Beides mischen!
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
33. FileMaker & Java - wozu?
‣ Viele professionelle & kostenlose Bibliotheken
‣ Lesen & Schreiben von Excel, Word, Powerpoint (Apache POI)
‣ Reportgeneratoren (iReport)
‣ Webinterfaces (Vaadin, GWT, Wicket, etc.)
‣ CalDAV
‣ Unterschied zu PHP
‣ professionellere Tools & Entwicklung
‣ unter anderem durch statische Typisierung
‣ einheitliche Java Umgebungen
‣ PHP-Umgebungen unterscheiden sich oft erheblich
‣ ausgereiftere Bibliotheken
‣ Application Server
‣ Jedoch
‣ komplizirteres Deployment
‣ höhere Hostingkosten
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
34. FileMaker & Java - HL7
‣ Health Level 7 (HL7) ist eine Gruppe internationaler Standards für den
Austausch von Daten zwischen Organisationen im Gesundheitswesen und
deren Computersystemen. (Wikipedia)
‣ Beispielnachricht:
MSH|^~&|EPIC|EPICADT|SMS|SMSADT|199912271408|CHARRIS|ADT^A04|1817457|D|2.5|
PID||0493575^^^2^ID 1|454721||DOE^JOHN^^^^|DOE^JOHN^^^^|19480203|M||B|254 MYSTREET
AVE^^MYTOWN^OH^44123^USA||(216)123-4567|||M|NON|400003403~1129086|
NK1||ROE^MARIE^^^^|SPO||(216)123-4567||EC|||||||||||||||||||||||||||
PV1||O|168 ~219~C~PMA^^^^^^^^^||||277^ALLEN MYLASTNAME^BONNIE^^^^|||||||||| ||
2688684|||||||||||||||||||||||||199912271408||||||002376853
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
35. FileMaker & Java - HAPI
‣ Einlesen in FileMaker?
‣ Studentengruppe: Parsen per PHP
‣ instabil
‣ fehleranfällig
‣ Lösung: FileMaker JDBC und
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
36. FileMaker & Java - HAPI
‣ Universitätsklinik Salzburg / Chirurgie West
‣ Problemlose Verarbeitung von mehr als 180.000 HL7
Nachrichten
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
37. FileMaker & Java - HAPI
QM an der UK für Chirurgie, Salzburg
Text
UK für Chirurgie der Paracelsus Medizinische Privatuniversität Salzburg | Stellenwert der QS in der Chirurgie | D. Öfner-Velano
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
38. FileMaker & Java - Beispiele
‣ iReport
‣ Reporting Engine, die weit mehr kann als FileMaker
‣ kostenlos
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
39. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
40. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
41. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
42. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
43. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
44. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
45. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
46. FileMaker & Java - Beispiele
SELECT
Sessions."Info" AS Sessions_Info,
Sessions."Durchfuehrung_Zeit_von" AS Sessions_Durchfuehrung_Zeit_von,
Sessions."Durchfuehrung_Zeit_bis" AS Sessions_Durchfuehrung_Zeit_bis,
Themen."Thema" AS Themen_Thema,
Themen."Beschreibung" AS Themen_Beschreibung,
Themen."Untertitel" AS Themen_Untertitel,
Sessions."Durchfuehrung_Datum" AS Sessions_Durchfuehrung_Datum,
Themen."Sortfield" AS Themen_Sortfield
FROM
"Themen" Themen INNER JOIN "Sessions" Sessions ON Themen."pkThema" = Sessions."fkThema"
ORDER BY
Sessions."Durchfuehrung_Datum",
Sessions."Durchfuehrung_Zeit_von"
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
47. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
48. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
49. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
50. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
51. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
52. FileMaker & Java - Beispiele
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
53. iReport
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
54. FileMaker & Java - Beispiele
‣ iReport
‣ Reporting Engine, die weit mehr kann als FileMaker
‣ kostenlos
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
55. FileMaker & Java - Solr
‣ „Suchmaschine“
‣ FileMaker Daten hineinfüttern
‣ Webinterface nutzen
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
56. FileMaker & Java - Solr
package com.schubec.demo.fmk2012.solr;
import java.net.MalformedURLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import org.apache.log4j.Logger;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
public class Start {
private static final String SERVER = "localhost";
private static final String USERNAME = "jdbc";
private static final String PASSWORD = "jdbc";
private static final String PORT = "2399";
private static final String DATABASE = "schubecEmails";
static Logger logger = Logger.getLogger(Start.class);
public static void main(String[] args) throws Exception,
MalformedURLException, SolrServerException {
SolrServer solr = new CommonsHttpSolrServer("http://localhost:8983/solr");
Class.forName("com.filemaker.jdbc.Driver").newInstance();
String jdbcString = "jdbc:filemaker://" + SERVER + ":" + PORT + "/"
+ DATABASE + "?user=" + USERNAME + "&password=" + PASSWORD;
System.out.println(jdbcString);
Connection connection = DriverManager.getConnection(jdbcString);
String sql = "select MessageID, TheDate, Priority, Body, Subject, EmailFrom, EmailTo from Messages ";
ResultSet resultSet = connection.prepareStatement(sql).executeQuery();
while (resultSet.next()) {
SolrInputDocument solrdoc = new SolrInputDocument();
solrdoc.addField("id", resultSet.getString("MessageID"));
solrdoc.addField("features", resultSet.getString("Body"));
solrdoc.addField("popularity", resultSet.getString("Priority"));
solrdoc.addField("last_modified", resultSet.getDate("TheDate"));
solrdoc.addField("subject", resultSet.getString("Subject"));
solrdoc.addField("author", resultSet.getString("EmailFrom"));
solrdoc.addField("comments", resultSet.getString("EmailTo"));
solr.add(solrdoc);
System.out.println("*");
}
solr.commit();
System.out.println("Done");
}
}
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
57. FileMaker & Java - Solr
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
58. FileMaker & Java - Solr
‣ Performance
‣ Facetten
‣ „More like this“
‣ Rechtschreibprüfung
‣ Synonyme
‣ Stopwörter
‣ Stemming
‣ laufen, lief, gelaufen
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
59. FileMaker & CalDAV
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
60. FileMaker & Scriptmaster
http://www.360works.com/scriptmaster/
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
61. FileMaker & Vaadin
DI (FH) DI Bernhard Schulz FileMaker Konferenz 2012 Salzburg
FileMaker und Java... ...und es eröffnen sich neue Welten www.filemaker-konferenz.com
62. FileMaker Konferenz2010
Vielen Dank unseren Sponsoren
Danke für das Bewerten dieses Vortrages
FileMaker Konferenz 2012 Salzburg
www.filemaker-konferenz.com