SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
Konstrukte diverser
Programmiersprachen in FileMaker
nachgebaut
Thomas Hirt

Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
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
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
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
Skripten vs. Custom Functions
Skripten

Custom Functions

• Clickable

• Reintext

• Scriptmaker

• Eingabefeld oder externer Editor

• Debugger

• debugging "von Hand"

• Loops

• Rekursionen

Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

Limits!!

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
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
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
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
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
Skripten vs. Custom Functions

Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
Skripten vs. Custom Functions

Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
(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
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
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
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
konkretes Beispiel 1:
Arrays
typische Funktionen

Pseudo-Code

• Array definieren

# array = ["a","b","c","d","e"]
> ["a","b","c","d","e"]

• Array abfragen

# wert = array[3]
> "d"

• Array-Element befüllen

# array[0] = "z"
> ["z","b","c","d","e"]

• Array-Länge herausfinden

# array.length

> 5

Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
konkretes Beispiel 1:
Arrays
typische Funktionen

Pseudo-Code

• Array erweitern

# array.add("x")
> ["z","b","c","d","e","x"]

• Array-Element entfernen

# array.remove(1)
> ["z","c","d","e","x"]

• Arrays verschmelzen

# array2 = ["f","g","h"]
> ["f","g","h"]
# array.merge(array2)

> ["z","c","d","e","x","f","g","h"]

Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
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
konkretes Beispiel 1:
Arrays
ScriptMaker:
Set Variable [$array;Value:"a|b|c|d|e"]
/* ===================================
* array.pipe.length ( array )
* =================================== */
PatternCount ( array; "|" ) + 1
/* ===================================
* array.pipe.add ( array; element )
* =================================== */
array & "|" & element
/* ===================================
* array.pipe.merge ( array1; array2 )
* =================================== */
array1 & "|" & array2
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
konkretes Beispiel 1:
Arrays
/* ===================================
* array.pipe.get ( array; index )
* =================================== */
Let (
[
_l
_indices

= Length ( array );
= PatternCount ( array; "|" ) + 1;

_elementPos1
=
Position(
_elementPosEnd =
Position(
_elementLength =

If ( index=0; 1;
array; "|"; 1; index) + 1 );
If ( index = _indices - 1; _l;
array; "|"; 1; index + 1 ) - 1 );
_elementPosEnd - _elementPos1 + 1

];
Middle( array; _elementPos1; _elementLength )
)
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
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
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
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
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
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
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
konkretes Beispiel 2:
Key-Value Pairs
/* ========================================
* keyvalue.key.exists ( store; key )
* ======================================== */
Let (
[
_keyLength

= Length ( key );

_keyAtStart = ( Left ( store; _keyLength + 1) = key & ":" );
_keyInside = Position ( store; "|" & key & ":"; 1; 1)
];
If(
_keyAtStart OR _keyInside;
true;
false
)
)
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
konkretes Beispiel 2:
Key-Value Pairs
/* ===================================
* keyvalue.remove ( store; key )
* =================================== */
Let (
[
_l
= Length ( store );
_keyLength = Length ( key );
_keyIsAt1
_keyPos1

= ( Left ( store; _keyLength + 1) = key & ":" );
= Position ( store; "|" & key & ":"; 1; 1 ) + 1;

_valueEnd = Position( store; "|"; _keyPos1; 1 ) - 1;
_keyIsLast = If (_valueEnd > 0; false; true );
];
Case( … )
)
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
konkretes Beispiel 2:
Key-Value Pairs
/* ===================================
* keyvalue.remove ( store; key )
* =================================== */
Let (
[ … ];
Case(
_keyIsAt1 AND _keyIsLast;
"";
_keyIsAt1;
Right ( store; _l - _valueEnd - 1);
_keyIsLast;
Left ( store; _keyPos1 - 2);
// default case: the key-value pair is in the middle
Left ( store; _keyPos1 - 2 ) &
Right ( store; _l - _valueEnd )
)
)
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
konkretes Beispiel 3:
Iteratoren
• Grundidee
• ein Iterator ist ein Befehl, der mehrfache Ausführung verlangt
• ausgeführt wird ein frei wählbarer Codeblock

• Codeblock nimmt (optional) eine Variable entgegen
• der Codeblock wird mehrfach ausgeführt
• Beispiel: Ruby Iteratoren

• 5.times { print "*" }
> *****
• ['cat','dog','mouse'].each { |i| print |i|, " " }
> cat dog mouse

Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
konkretes Beispiel 3:
Iteratoren
• Iterator "times"
• iterator.times ( iterations; target; function )
• iterator.times ( 3; "abcdefghijklmn";
"Left ( "<<target>>"; 3 ) & ¶" )
• "abc¶abc¶abc¶"
• Iterator "each"
• iterator.each ( targets; delimiter; function )
• iterator.each ("1234¶5678¶abcd¶";"¶";"Left(<<target>>;3)")
• "123567abc"
• Basis zur Umsetzung: Evaluate()
• ahnliche Funktion im Netz: CustomList()
• http://www.briandunning.com/cf/868
• FMM 2010|04, pp21-29, Kegebein A., K&K Verlag GmbH, Hamburg
• FMM 2010|04, pp30-32, Ricker F., K&K Verlag GmbH, Hamburg
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
konkretes Beispiel 3:
Iteratoren
/* ================================================
* iterator.times ( iterations; target; function )
* ================================================ */
Let (
[
_iterations
= Floor ( GetAsNumber ( iterations ) );
_iterationsValid = If ( _iterations > 0; True; False );
_function = Substitute ( function; "<<target>>"; target);
_result
= Evaluate ( _function )
];
Case (
NOT _iterationsValid; "";
_iterations = 1; _result;
_result & iterator.times ( _iterations - 1; target; function )
)
)
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
konkretes Beispiel 3:
Iteratoren
/* ================================================
* iterator.each ( targets; delimiter; function )
* ================================================ */
Let (
[
_delim = Position ( targets; delimiter; 1; 1 );
_target = If ( _delim>0; Left(targets; _delim - 1); targets );
_rem
= Right ( targets; Length ( targets ) - _delim );
_function = Substitute ( function; "<<target>>"; _target );
_result
= Evaluate ( _function )
];
If(
_delim > 0;
_result & iterator.each ( _rem; delimiter; function );
_result
)
)
Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg
www.filemaker-konferenz.com
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
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
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
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

Weitere ähnliche Inhalte

Andere mochten auch

Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...
 Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento... Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...
Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...GERMAN RACING Concept Challenge
 
Hürden sind zum nehmen da - Obstacles are for Overcoming
Hürden sind zum nehmen da - Obstacles are for OvercomingHürden sind zum nehmen da - Obstacles are for Overcoming
Hürden sind zum nehmen da - Obstacles are for OvercomingFreekidstories
 
Radiojournalismus. Ein Blockseminar. - Seminar 2/4: Audioschnitt
Radiojournalismus. Ein Blockseminar. - Seminar 2/4:  AudioschnittRadiojournalismus. Ein Blockseminar. - Seminar 2/4:  Audioschnitt
Radiojournalismus. Ein Blockseminar. - Seminar 2/4: AudioschnittRobert Piehler
 
FMK 2013 Suchen, markieren und Listen, Mehrbenutzer , Longin Ziegler
FMK 2013 Suchen, markieren und Listen, Mehrbenutzer , Longin ZieglerFMK 2013 Suchen, markieren und Listen, Mehrbenutzer , Longin Ziegler
FMK 2013 Suchen, markieren und Listen, Mehrbenutzer , Longin ZieglerVerein FM Konferenz
 

Andere mochten auch (8)

Pte. paula
Pte. paulaPte. paula
Pte. paula
 
Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...
 Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento... Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...
Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...
 
Hürden sind zum nehmen da - Obstacles are for Overcoming
Hürden sind zum nehmen da - Obstacles are for OvercomingHürden sind zum nehmen da - Obstacles are for Overcoming
Hürden sind zum nehmen da - Obstacles are for Overcoming
 
Radiojournalismus. Ein Blockseminar. - Seminar 2/4: Audioschnitt
Radiojournalismus. Ein Blockseminar. - Seminar 2/4:  AudioschnittRadiojournalismus. Ein Blockseminar. - Seminar 2/4:  Audioschnitt
Radiojournalismus. Ein Blockseminar. - Seminar 2/4: Audioschnitt
 
Ferdinand de Saussure
Ferdinand de SaussureFerdinand de Saussure
Ferdinand de Saussure
 
Studie: Digitales OTC Marketing für die Generation 50+
Studie: Digitales OTC Marketing für die Generation 50+Studie: Digitales OTC Marketing für die Generation 50+
Studie: Digitales OTC Marketing für die Generation 50+
 
FMK 2013 Suchen, markieren und Listen, Mehrbenutzer , Longin Ziegler
FMK 2013 Suchen, markieren und Listen, Mehrbenutzer , Longin ZieglerFMK 2013 Suchen, markieren und Listen, Mehrbenutzer , Longin Ziegler
FMK 2013 Suchen, markieren und Listen, Mehrbenutzer , Longin Ziegler
 
Winter1
Winter1Winter1
Winter1
 

Ähnlich wie FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich SchmidtFMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich SchmidtVerein FM Konferenz
 
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichFMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichVerein FM Konferenz
 
FMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian SchmitzFMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian SchmitzVerein FM Konferenz
 
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...Verein FM Konferenz
 
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick Risch
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick RischFMK2015: Von Skriptparametern Variablen und Globalen by Patrick Risch
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick RischVerein FM Konferenz
 
FMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzFMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzVerein FM Konferenz
 
FMK2015: The Power of JavaScript by Marcel Moré
FMK2015: The Power of JavaScript by Marcel MoréFMK2015: The Power of JavaScript by Marcel Moré
FMK2015: The Power of JavaScript by Marcel MoréVerein FM Konferenz
 
FM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas HirtFM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas HirtVerein FM Konferenz
 
Language Workbench
Language WorkbenchLanguage Workbench
Language Workbenchzensor
 
FMK2022 Neue Programmiertechniken von Adam Augusting
FMK2022 Neue Programmiertechniken von Adam AugustingFMK2022 Neue Programmiertechniken von Adam Augusting
FMK2022 Neue Programmiertechniken von Adam AugustingVerein FM Konferenz
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1DraphonyGames
 
FMK2015: FileMaker Grundlagen Formeln by Longin Ziegler
FMK2015: FileMaker Grundlagen Formeln by Longin ZieglerFMK2015: FileMaker Grundlagen Formeln by Longin Ziegler
FMK2015: FileMaker Grundlagen Formeln by Longin ZieglerVerein FM Konferenz
 
Der gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open SourceDer gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open Sourceyellowcow
 
Docbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XMLDocbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XMLPeter Eisentraut
 
FMK2014: FileMaker Module by Karsten Risseeuw
FMK2014: FileMaker Module by Karsten RisseeuwFMK2014: FileMaker Module by Karsten Risseeuw
FMK2014: FileMaker Module by Karsten RisseeuwVerein FM Konferenz
 
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas Hirt
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas HirtFMK2014: FileMaker Server in Windows Server Umgebungen by Thomas Hirt
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas HirtVerein FM Konferenz
 
Webservice API - Webportale mit Force.com verbinden
Webservice API - Webportale mit Force.com verbindenWebservice API - Webportale mit Force.com verbinden
Webservice API - Webportale mit Force.com verbindenAptly GmbH
 
Python Bootcamp - Grundlagen
Python Bootcamp - GrundlagenPython Bootcamp - Grundlagen
Python Bootcamp - GrundlagenDatamics
 

Ähnlich wie FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt (20)

FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich SchmidtFMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
 
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang WunderlichFMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
FMK2015: FrameWork Konzepte in FileMaker Pro by Wolfgang Wunderlich
 
FMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian SchmitzFMK2014: FileMaker Plugin erzeugen by Christian Schmitz
FMK2014: FileMaker Plugin erzeugen by Christian Schmitz
 
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
 
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick Risch
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick RischFMK2015: Von Skriptparametern Variablen und Globalen by Patrick Risch
FMK2015: Von Skriptparametern Variablen und Globalen by Patrick Risch
 
FMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzFMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian Schmitz
 
FMK2015: The Power of JavaScript by Marcel Moré
FMK2015: The Power of JavaScript by Marcel MoréFMK2015: The Power of JavaScript by Marcel Moré
FMK2015: The Power of JavaScript by Marcel Moré
 
FM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas HirtFM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas Hirt
 
Language Workbench
Language WorkbenchLanguage Workbench
Language Workbench
 
FMK2022 Neue Programmiertechniken von Adam Augusting
FMK2022 Neue Programmiertechniken von Adam AugustingFMK2022 Neue Programmiertechniken von Adam Augusting
FMK2022 Neue Programmiertechniken von Adam Augusting
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1
 
FMK2015: FileMaker Grundlagen Formeln by Longin Ziegler
FMK2015: FileMaker Grundlagen Formeln by Longin ZieglerFMK2015: FileMaker Grundlagen Formeln by Longin Ziegler
FMK2015: FileMaker Grundlagen Formeln by Longin Ziegler
 
Windows Powershell
Windows PowershellWindows Powershell
Windows Powershell
 
Der gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open SourceDer gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open Source
 
Docbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XMLDocbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XML
 
FMK2014: FileMaker Module by Karsten Risseeuw
FMK2014: FileMaker Module by Karsten RisseeuwFMK2014: FileMaker Module by Karsten Risseeuw
FMK2014: FileMaker Module by Karsten Risseeuw
 
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas Hirt
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas HirtFMK2014: FileMaker Server in Windows Server Umgebungen by Thomas Hirt
FMK2014: FileMaker Server in Windows Server Umgebungen by Thomas Hirt
 
Webservice API - Webportale mit Force.com verbinden
Webservice API - Webportale mit Force.com verbindenWebservice API - Webportale mit Force.com verbinden
Webservice API - Webportale mit Force.com verbinden
 
Ein Gopher im Netz
Ein Gopher im NetzEin Gopher im Netz
Ein Gopher im Netz
 
Python Bootcamp - Grundlagen
Python Bootcamp - GrundlagenPython Bootcamp - Grundlagen
Python Bootcamp - Grundlagen
 

Mehr von Verein FM Konferenz

FMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdfFMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdfVerein FM Konferenz
 
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsFMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsVerein FM Konferenz
 
FMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp PulsFMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp PulsVerein FM Konferenz
 
FMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin SchwarzFMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin SchwarzVerein FM Konferenz
 
FMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard SchulzFMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard SchulzVerein FM Konferenz
 
FMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard SchulzFMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard SchulzVerein FM Konferenz
 
FMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam AugustinFMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam AugustinVerein FM Konferenz
 
FMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert KaiserFMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert KaiserVerein FM Konferenz
 
FMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtFMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtVerein FM Konferenz
 
FMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas HirtFMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas HirtVerein FM Konferenz
 
FMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell WatsonFMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell WatsonVerein FM Konferenz
 
FMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph KlussFMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph KlussVerein FM Konferenz
 
FMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph KlussFMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph KlussVerein FM Konferenz
 
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdf
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdfFMK2022 Die Zukunft von FileMaker - Marcel Moré.pdf
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdfVerein FM Konferenz
 
FMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell WatsonFMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell WatsonVerein FM Konferenz
 
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoFMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoVerein FM Konferenz
 
FMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza KoudelkaFMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza KoudelkaVerein FM Konferenz
 
FMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza KoudelkaFMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza KoudelkaVerein FM Konferenz
 
Fmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald MairFmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald MairVerein FM Konferenz
 
FMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam AugustinVerein FM Konferenz
 

Mehr von Verein FM Konferenz (20)

FMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdfFMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdf
 
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsFMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
 
FMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp PulsFMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp Puls
 
FMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin SchwarzFMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin Schwarz
 
FMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard SchulzFMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
 
FMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard SchulzFMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard Schulz
 
FMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam AugustinFMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam Augustin
 
FMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert KaiserFMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
 
FMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtFMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas Hirt
 
FMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas HirtFMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
 
FMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell WatsonFMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell Watson
 
FMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph KlussFMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph Kluss
 
FMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph KlussFMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph Kluss
 
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdf
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdfFMK2022 Die Zukunft von FileMaker - Marcel Moré.pdf
FMK2022 Die Zukunft von FileMaker - Marcel Moré.pdf
 
FMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell WatsonFMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell Watson
 
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoFMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
 
FMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza KoudelkaFMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
 
FMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza KoudelkaFMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza Koudelka
 
Fmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald MairFmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald Mair
 
FMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
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
  • 5. Skripten vs. Custom Functions Skripten Custom Functions • Clickable • Reintext • Scriptmaker • Eingabefeld oder externer Editor • Debugger • debugging "von Hand" • Loops • Rekursionen Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut Limits!! 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
  • 16. konkretes Beispiel 1: Arrays typische Funktionen Pseudo-Code • Array definieren # array = ["a","b","c","d","e"] > ["a","b","c","d","e"] • Array abfragen # wert = array[3] > "d" • Array-Element befüllen # array[0] = "z" > ["z","b","c","d","e"] • Array-Länge herausfinden # array.length > 5 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  • 17. konkretes Beispiel 1: Arrays typische Funktionen Pseudo-Code • Array erweitern # array.add("x") > ["z","b","c","d","e","x"] • Array-Element entfernen # array.remove(1) > ["z","c","d","e","x"] • Arrays verschmelzen # array2 = ["f","g","h"] > ["f","g","h"] # array.merge(array2) > ["z","c","d","e","x","f","g","h"] 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
  • 19. konkretes Beispiel 1: Arrays ScriptMaker: Set Variable [$array;Value:"a|b|c|d|e"] /* =================================== * array.pipe.length ( array ) * =================================== */ PatternCount ( array; "|" ) + 1 /* =================================== * array.pipe.add ( array; element ) * =================================== */ array & "|" & element /* =================================== * array.pipe.merge ( array1; array2 ) * =================================== */ array1 & "|" & array2 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  • 20. konkretes Beispiel 1: Arrays /* =================================== * array.pipe.get ( array; index ) * =================================== */ Let ( [ _l _indices = Length ( array ); = PatternCount ( array; "|" ) + 1; _elementPos1 = Position( _elementPosEnd = Position( _elementLength = If ( index=0; 1; array; "|"; 1; index) + 1 ); If ( index = _indices - 1; _l; array; "|"; 1; index + 1 ) - 1 ); _elementPosEnd - _elementPos1 + 1 ]; Middle( array; _elementPos1; _elementLength ) ) 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
  • 27. konkretes Beispiel 2: Key-Value Pairs /* ======================================== * keyvalue.key.exists ( store; key ) * ======================================== */ Let ( [ _keyLength = Length ( key ); _keyAtStart = ( Left ( store; _keyLength + 1) = key & ":" ); _keyInside = Position ( store; "|" & key & ":"; 1; 1) ]; If( _keyAtStart OR _keyInside; true; false ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  • 28. konkretes Beispiel 2: Key-Value Pairs /* =================================== * keyvalue.remove ( store; key ) * =================================== */ Let ( [ _l = Length ( store ); _keyLength = Length ( key ); _keyIsAt1 _keyPos1 = ( Left ( store; _keyLength + 1) = key & ":" ); = Position ( store; "|" & key & ":"; 1; 1 ) + 1; _valueEnd = Position( store; "|"; _keyPos1; 1 ) - 1; _keyIsLast = If (_valueEnd > 0; false; true ); ]; Case( … ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  • 29. konkretes Beispiel 2: Key-Value Pairs /* =================================== * keyvalue.remove ( store; key ) * =================================== */ Let ( [ … ]; Case( _keyIsAt1 AND _keyIsLast; ""; _keyIsAt1; Right ( store; _l - _valueEnd - 1); _keyIsLast; Left ( store; _keyPos1 - 2); // default case: the key-value pair is in the middle Left ( store; _keyPos1 - 2 ) & Right ( store; _l - _valueEnd ) ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  • 30. konkretes Beispiel 3: Iteratoren • Grundidee • ein Iterator ist ein Befehl, der mehrfache Ausführung verlangt • ausgeführt wird ein frei wählbarer Codeblock • Codeblock nimmt (optional) eine Variable entgegen • der Codeblock wird mehrfach ausgeführt • Beispiel: Ruby Iteratoren • 5.times { print "*" } > ***** • ['cat','dog','mouse'].each { |i| print |i|, " " } > cat dog mouse Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  • 31. konkretes Beispiel 3: Iteratoren • Iterator "times" • iterator.times ( iterations; target; function ) • iterator.times ( 3; "abcdefghijklmn"; "Left ( "<<target>>"; 3 ) & ¶" ) • "abc¶abc¶abc¶" • Iterator "each" • iterator.each ( targets; delimiter; function ) • iterator.each ("1234¶5678¶abcd¶";"¶";"Left(<<target>>;3)") • "123567abc" • Basis zur Umsetzung: Evaluate() • ahnliche Funktion im Netz: CustomList() • http://www.briandunning.com/cf/868 • FMM 2010|04, pp21-29, Kegebein A., K&K Verlag GmbH, Hamburg • FMM 2010|04, pp30-32, Ricker F., K&K Verlag GmbH, Hamburg Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  • 32. konkretes Beispiel 3: Iteratoren /* ================================================ * iterator.times ( iterations; target; function ) * ================================================ */ Let ( [ _iterations = Floor ( GetAsNumber ( iterations ) ); _iterationsValid = If ( _iterations > 0; True; False ); _function = Substitute ( function; "<<target>>"; target); _result = Evaluate ( _function ) ]; Case ( NOT _iterationsValid; ""; _iterations = 1; _result; _result & iterator.times ( _iterations - 1; target; function ) ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  • 33. konkretes Beispiel 3: Iteratoren /* ================================================ * iterator.each ( targets; delimiter; function ) * ================================================ */ Let ( [ _delim = Position ( targets; delimiter; 1; 1 ); _target = If ( _delim>0; Left(targets; _delim - 1); targets ); _rem = Right ( targets; Length ( targets ) - _delim ); _function = Substitute ( function; "<<target>>"; _target ); _result = Evaluate ( _function ) ]; If( _delim > 0; _result & iterator.each ( _rem; delimiter; function ); _result ) ) 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