FMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt
1. Konstrukte diverser
Programmiersprachen in FileMaker
nachgebaut
Thomas Hirt
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
2. Was Sie erwartet
In den folgenden 90 Minuten erwartet Sie ein Leitfaden dazu, wie
sich FileMaker mittels Custom Functions um mächtige
Programmierkonstrukte erweitern lässt.
Einleitend erkläre ich, worin die Stärken und Schwächen von
Custom Functions liegen, wenn man sie mit anderen Methoden
vergleicht, mit denen man Ähnliches erreichen kann.
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
3. Inhaltsübersicht
• Plugin oder nicht Plugin, das ist hier die Frage
• Skripten vs. Custom Functions
• (m)eine Methode zur Entwicklung einer CF Library kurz vorgestellt
• Welche programmatischen Mittel stehen in CFs zur Verfügung?
• konkrete Beispiele
• Arrays
• Key-Value Pairs
• Iteratoren
• weitere Ideen für Strukturen, Werkzeuge und Bibliotheken
• Q&A
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
4. Plugin oder nicht Plugin,
das ist hier die Frage
PRO Plugin
PRO Eigenentwicklung
• teilweise Zusatzfunktionalität,
welche nur als Plugin erhältlich
ist
• FM Go kennt keine Plugins
• Code aus anderen
Programmiersprachen in FM
nutzbar
• teilweise kommerzieller Support
erhältlich
• sofort verfügbar
• gut kalkulierbare Kosten
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
• Abhängigkeit birgt Gefahren
• ungefixte Bugs
• Unterstützung neuer
FileMaker Releases
• Inkompatibilitäten mit
Updates bei Drittsoftware
• Know-How entsteht in house
• schnelle Reaktion auf Feature
Requests möglich
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
6. Skripten vs. Custom Functions
Limitationen von Rekursionen in Custom Functions
• Maximum an rekursiven Aufrufen in einer CF: 50'000
• maximale Rekursionstiefe zu einem bestimmten Zeitpunkt: 10'000
• maximale Grösse einer Formel: 30'000 Zeichen
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
7. Skripten vs. Custom Functions
Skripten
Custom Functions
• Clickable
• Reintext
• Scriptmaker
• Eingabefeld oder externer Editor
• Debugger
• debugging "von Hand"
• Loops
• Rekursionen
• schwer versionierbar
• extern leicht versionierbar
• >1 Parameter nur mit Methoden
des "Function Scriptings"
• viele Parameter möglich
Limits!!
• fast immer abhängig von FMDB
• Code ist leicht unabhängig von
konkreter FMDB zu halten
• langsam
• schnell
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
8. Skripten vs. Custom Functions
• Geschwindigkeitstest
• Taylor-Reihe zur numerischen Berechnung von sin(x)
•
sin( )
1!
3
3!
5
5!
7
7!
9
9!
11 13
11!
13!
15
15!
...
• α in Radiant ( 0 ≤ α ≤ 2π )
• π als Konstante
• x in Grad (normiert auf 0° ≤ x ≤ 360°) mittels Modulo-Funktion
• berechnet wurde
• sin(x) für schrittweise erhöhte Gradzahlen
• Anzahl Schritte und Schrittweite wählbar
• Zeitmessung
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
9. Skripten vs. Custom Functions
• unterschiedliche Berechnungsmethoden
• alles mittels Skripten, ein Datensatz pro Berechnung
• alles mittels Skripten, globales Feld für Resultate
• alles mittels Skripten, Einsatz von Variablen
• alles mittels Custom Functions
• möglichst viel mittels Custom Functions
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
10. Skripten vs. Custom Functions
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
11. Skripten vs. Custom Functions
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
12. (m)eine Methode zur Entwicklung einer
CF Library kurz vorgestellt
• Werkzeuge
• Sublime Text als Editor
• Subversion oder Git als Code Versionierungssystem
• eine FM12 DB als CF Repository
• Konventionen
• Englisch
• umfangreicher Header in jeder CF
• in-code Dokumentation
• Wiederverwendbarkeit
• Sinn der Sache
• Vermeidung von Abhängigkeiten
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
13. Welche programmatischen Mittel stehen
in CFs zur Verfügung?
• Strukturen
• Sequenzen ( Instruktion;
Instruktion; Instruktion; … )
• Verzweigungen ( If, Case )
• Rekursionen
• Code Block ( Let )
• Variablen
• Referenzen auf Felder
• globale Felder
• Felder des aktiven
Datensatzes
• alle Datensätze mittels
ExecuteSQL
• Funktionen
• Skript-lokale Variablen
(z.B. $var)
• FileMaker Functions
• *.fmp12-lokale Variablen,
genannt "globale" Variablen
(z.B. $$var)
• externe Funktionen
• CF-lokale Variablen
(z.B. _var)
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
• andere Custom Functions
• Input/Output
• Parameter
• Return Value
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
14. Welche programmatischen Mittel stehen
in CFs NICHT zur Verfügung?
• klassische Schleifen
• komplexere Datenstrukturen
• Referenzen auf LayoutElemente
• Struct
• Referenzen auf Fenster
• Union
• Referenzen auf Ressourcen
des Betriebssystems
• Array
• Listen
• Objektorientierung
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
15. Konkrete Beispiele
• Aus didaktischen Gründen und aufgrund der beschränkten Zeit wurde
eine verknappte Darstellung gewählt.
• In den meisten Beispielen wurden gewisse Randbedingungen
unterschlagen.
• Error-Handling wurde unterlassen.
• Ohne Ergänzungen sind die Beispiele für den produktiven Einsatz nicht
geeignet.
• Die Custom Functions, welche Sie in FileMaker-Datei im DownloadBereich als Begleitmaterial finden, sind deutlich ausgereifter.
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
18. konkretes Beispiel 1:
Arrays
• Idee für die Abbildung
• wir haben nur Text und Variablen zur Verfügung
• Array-Struktur muss mittels Text-Delimitern erzeugt werden
• , ; | # ¶ könnten z.B. in Frage kommen
• kompliziertere Delimiter (z.B. <##> oder @@@@) für mehr
Robustheit
• Abbildungsbeispiele
• 10|15|29|107|8|63
• 1'621<##>ein¶Text¶<##>ich|enthalte#sonderzeichen;<##>buh!
• eine Kombination mehrerer Delimiter erlaubt 2- und mehrdimensionale
Arrays
• "1|2|3¶4|5|6¶7|8|9"
• "1|2|3¶4|5|6¶7|8|9@@@10|11|12¶13|14|15¶16|17|18@@@
19|20|21¶22|23|24¶25|26|27"
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
21. konkretes Beispiel 1:
Arrays
/* ========================================
* array.pipe.set ( array; index; element )
* ======================================== */
Let (
[
_l
_indices
= Length ( array );
= PatternCount ( array; "|" ) + 1
_elementPos1
=
Position(
_elementPosEnd =
Position(
If ( index=0; 1;
array; "|"; 1; index ) + 1 );
If ( index = _indices - 1; _l;
array; "|"; 1; index + 1 ) - 1 );
];
Left( array; _elementPos1 - 1 ) & element &
Right ( array; _l - _elementPosEnd )
)
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
22. konkretes Beispiel 1:
Arrays
/* ===================================
* array.pipe.remove ( array; index )
* =================================== */
Let (
[
_l
= Length ( array );
_indices
= PatternCount ( array;
_elementPos1
= If ( index = 0; 1;
Position( array; "|"; 1; index ) + 1
_elementPosEnd = If ( index = _indices
Position( array; "|"; 1; index + 1 )
];
If (
index = 0;
Right ( array; _l - _elementPosEnd - 1
Left( array; _elementPos1 - 2 ) &
Right ( array; _l - _elementPosEnd )
)
)
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
"|" ) + 1
);
- 1; _l;
- 1 );
);
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
23. konkretes Beispiel 2:
Key-Value Pairs
typische Funktionen
Pseudo-Code
• neues Paar zu einem Set
hinzufügen
#
>
#
>
• Wert zu Schlüssel abfragen
# myWife.get("hair")
> "black"
• abfragen, ob ein Schlüssel
enthalten ist
# myWife.exists("height")
> true
• ein Paar aus einem Set
entfernen
# myWife.remove("height")
> ["hair"=>"black"]
myWife.add("hair";"black")
["hair"=>"black"]
myWife.add("height";"167cm")
["hair"=>"black;"height"=>"167cm"]
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
24. konkretes Beispiel 2:
Key-Value Pairs
• Vorschläge für die Abbildung
• "ferrari:12.36s|bmw:16.71s|audi:15.96s|opel:21.67s"
• "|#>|groesse|>>|169cm|<#|¶|#>|haarfarbe|>>|schwarz|<#|¶"
• In einer Variable oder einem Textfeld lassen sich auch mehrere QuasiDatensätze speichern.
• "{gewicht:1.6|porto:2.50|aufgabedatum:16.05.2013}¶
{gewicht:0.2|porto:0.65|aufgabedatum:02.09.2013}¶"
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
25. konkretes Beispiel 2:
Key-Value Pairs
ScriptMaker:
Set Variable [$keyValueStore;Value:"a:1|b:2|c:3|d:4"]
/* ===================================
* keyvalue.length ( store )
* =================================== */
PatternCount ( store; "|" ) + 1
/* ===================================
* keyvalue.add ( store; key; value )
* =================================== */
store & "|" & key & ":" & value
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
26. konkretes Beispiel 2:
Key-Value Pairs
/* ===================================
* keyvalue.get ( store; key )
* =================================== */
Let (
[
_l
= Length ( store );
_keyPos1
= Position( store; "|" & key & ":"; 1; 1 ) + 1;
_valuePos1
= _keyPos1 + Length ( key ) + 1;
// calculate end position of value and include treatment
// of special case if key is last key in store
_valuePosEnd = Position( store; "|"; _valuePos1; 1 ) -1 );
_valuePosEnd = If (_valuePosEnd = -1; _l; _valuePosEnd );
_valueLength = _valuePosEnd - _valuePos1 + 1
];
Middle( store; _elementPos1; _valueLength )
)
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
34. Ideen für Strukturen und Werkzeuge,
die sich mit CFs umsetzen lassen
• STRUCT mit strenger Typisierung
• ERROR handling
• Vergleichsalgorithmen
• Sortieralgorithmen
• Codierungen
• ROT13
• BASE64
• Hash-Werte
• MD5
• SHA128
• Serialisierungen
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
35. Ideen für Bibliotheken, die sich mit CFs
umsetzen lassen
• Netzwerktoolbox
• IPv4 Adressen auf Gültigkeit überprüfen
• Ist eine IPv4 Adresse in einem bestimmten Subnetz?
• Überlappen sich 2 Bereiche von IPv4-Adressen?
• Koordinatenberechnungen
• Definition von Koordinatensystemen
• Erfassung von Punkten/Kurven/Flächen im Koordinatensystem
• Prüfung, ob eine Koordinate auf einer definierten Fläche liegt
• Umrechnung von Koordinaten aus einem System ins andere
• Analyse oder Generierung von Markup Sprachen
• JSON
• HTML
• XML
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
36. Questens & Answers
Danke für Ihr Interesse!
Haben Sie Fragen?
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
37. Vielen Dank unseren Sponsoren
Danke für die Bewertung dieses Vortrages
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut
FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com