FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Über den Sprecher
• Studium der Biochemie und des Software Engineering
• betreut seit 25+ Jahren Kleinunternehmen und
Privatkunden in Informatikbelangen
• Geschäftsführer und Inhaber der Tek:Guides GmbH
• Windows Umgebungen als Hauptbetätigungsfeld
• Einsatz von FileMaker als Entwicklungsplattform seit 2009
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Inhalt
• FileMaker Funktionen als Grundlage von Custom Functions
• Funktionen in der FileMaker Entwicklungsumgebung
• Funktionsreferenz in der FileMaker Hilfe
• Wie erstellt man Custom Functions? – Teil 1
• Erstellung von Custom Functions
• ein ganz einfaches Beispiel
• Eigenschaften von Custom Functions
• Wie erstellt man Custom Functions? – Teil 2
• wichtige Strukturbausteine
• Beispiele als Ideengeber
• Wann sind Custom Functions sinnvoll?
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
FileMaker Funktionen als Grundlage
von Custom Functions
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
?
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionsreferenz in FileMaker Hilfe
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionsreferenz in FileMaker Hilfe
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Wie erstellt man Custom Functions?
Teil 1
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Erstellung von Custom Functions
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Erstellung von Custom Functions
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Erstellung von Custom Functions
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Erstellung von Custom Functions
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
• Ausgabe des deutschen Wochentags zu einem Datum
• Schritt 1: durchsuchen der FileMaker Funktionen aus dem Bereich "Datum"
• Schritt 2: durchsuchen der FileMaker Funktionen aus dem Bereich "Logik", um
einen geeigneten Logarithmus zu ersinnen
• Kombination der ausgesuchten Funktionen zu einer eigenen "Custom Function"
mit dem Namen "Wochentag" und einem Parameter "datum"
• Wochentag ( datum )
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
• DayOfWeek ( date )
• liefert als Antwort die Zahl 1 für einen Sonntag, 2 für einen Montag, etc.
• DayOfWeek ( Date ( 6 ; 18 ; 2020 ) )
• FileMaker erledigt für uns also bereits die eigentliche Berechnung des
Wochentags. Wir müssen nur noch die Zahlen der deutschen Bezeichnung
zuordnen.
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
• Choose ( test ; result0 {; result1 ; result2…} )
• eine Berechnung ("test") muss natürliche Zahlen beginnend mit 0 ausgeben
• nach der Berechnung werden der Reihe nach die Werte aufgezählt, welche den
Ergebnissen 0, 1, 2, usw. zugeordnet werden
• Wir können die Funktionen "Choose" und "DayOfWeek" miteinander
kombinieren:
Choose (
DayOfWeek ( datum ) - 1;
"Sonntag";
"Montag";
"Dienstag";
"Mittwoch";
"Donnerstag";
"Freitag";
"Samstag"
)
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Eigenschaften von Custom Functions
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Eigenschaften von Custom Functions
• begrenzt im Umfang
• Name ≤ 100 Zeichen
• max. 30’000 Zeichen
• verschachtelte Aufrufe limitiert
• max. 50’000 Schleifendurchläufe
• max. 50’000 rekursive Aufrufe
• max. Verschachtelung gleichzeitig aktiver Aufrufe: 10’000
• Verschachtelungstiefe auf eigenes Risiko mit SetRecursion () änderbar
• Limitationen im Prinzip identisch zu Berechnungen
• Debugging von Hand im Data Viewer, keine Unterstützung durch Debugger
• in andere Lösungen importierbar, Reihenfolge bei Import kritisch
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Wie erstellt man Custom Functions?
Teil 2
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
wichtige Strukturbausteine
Let (
[
wert1 = meineBerechnung1;
wert2 = meineBerechnung2;
wert3 = meineBerechnung1;
...
wertN = meineBerechnungN
];
berechnungRückgabewert
)
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
wichtige Strukturbausteine
If (
bedingung = wert;
berechnungRückgabewert1;
berechnungRückgabewert2
)
Case (
bedingung1 = wert1;
berechnungRückgabewert1;
bedingung2 = wert2;
berechnungRückgabewert2;
...
bedingungN = wertN;
berechnungRückgabewertN;
berechnungRückgabewertUniversell
)
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
wichtige Strukturbausteine
Evaluate (
)
Text, welcher zur Laufzeit (z.B. mittels Variablen)
zusammengebaut wird und danach als Berechnung
interpretiert wird
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
wichtige Strukturbausteine
Die Strukturelemente "Let", "If", "Case", "While"
und "Evaluate" lassen sich beliebig kombinieren
und ineinander verschachteln, so dass auch sehr
komplexe Berechnungen abgebildet werden können.
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
wichtige Strukturbausteine
Let (
[
wert1 = If (
bedingung = wert;
berechnungRückgabewert1;
berechnungRückgabewert2
);
wert2 = meineBerechnung2;
wert3 = Evaluate ( XXXXXXXXXXXXXXXXXXXXXX );
wert4 = 123...
];
Case (
bedingungX = wertX;
berechnungRückgabewertX;
bedingungY = wertY;
berechnungRückgabewertY;
berechnungRückgabewertUniversell
)
)
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Beispiel 1: Alter
• Beim erstellen von Custom Function Bibliotheken ist es sinnvoll, die Funktionen
thematisch zu gliedern. Der erste Teil des Funktionsnamens ("time.") hat
diesen Zweck.
• Es wird ein Parameter dateOfBirth übergeben. Es ist wichtig zu überprüfen,
ob dieser Parameter ein geeignetes Format hat.
time.age ( dateOfBirth )
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Beispiel 1: Alter
• Lösungsidee:
• Näherungsweise kann das Alter berechnet werden, indem man von der
aktuell gültigen Jahreszahl das Jahr des Geburtstages abzieht.
• Es muss zusätzlich berücksichtigt werden, ob der Geburtstag im aktuellen
Jahr schon vorbei ist oder nicht.
time.age ( dateOfBirth )
Jahr
Geburtstag
aktuelles Jahr - Geburtsjahr
aktuelles Jahr - Geburtsjahr - 1
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Beispiel 1: Alter
Einfache Methode, um
sicherzustellen, dass der
übergebene Parameter
das richtige Format hat.
Let (
[
// aktuelles Datum
_today = Get ( CurrentDate );
_todayY = Year ( _today );
_todayM = Month ( _today );
_todayD = Day ( _today );
// Geburtstag
_birthday = GetAsDate ( dateOfBirth );
_birthdayY = Year ( _birthday );
_birthdayM = Month ( _birthday );
_birthdayD = Day ( _birthday );
// Geburtstag dieses Jahr schon vorbei?
_birthdayPast = Case (
_todayM > _birthdayM; 1;
( _todayM = _birthdayM ) and ( _todayD ≥ _birthdayD ); 1;
0
)
];
// Altersberechnung
If (
_birthdayPast;
_todayY - _birthdayY;
_todayY - _birthdayY - 1
)
)
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Ausgangsdaten
Beispiel 2: Seitenzahlen
Ziel
• gegeben sei eine Liste von
Seitenzahlen in aufsteigender
Reihenfolge
• Die Seitenzahlen werden durch
Absatzmarken getrennt, d.h. pro
Zeile findet sich eine Seitenzahl.
• Die Liste der Seitenzahlen soll auf
einer Zeile dargestellt werden.
• Die Seitenzahlen sollen durch
Kommas und Abstand voneinander
getrennt werden.
• Aufeinanderfolgende Seitenzahlen
sollen als Serie xx-yy dargestellt
werden, um die Liste zu verkürzen.
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Ausgangsdaten
Beispiel 2: Seitenzahlen
Ziel
5
9
22
23
24
25
51
67
103
104
5, 9, 22-25, 51, 67, 103-104
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Beispiel 2: Seitenzahlen
numbers.list.shorten ( listOfNumbers )
While (
[
_shortenedList = "";
_remainingList = listOfNumbers;
_lastNumber = 0;
_lastNumberWasInSeries = 0
];
not IsEmpty ( _remainingList );
[
// nächste Zahl in Ausgangsliste merken
// Zahl an verkürzte Liste anhängen
// Ausgangsliste um 1 Zahl verkürzen
];
_shortenedList
)
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
While (
[
_shortenedList = "";
_remainingList = listOfNumbers;
_lastNumber = 0;
_lastNumberWasInSeries = 0
];
not IsEmpty ( _remainingList );
[
_remainingNumberCount = ValueCount ( _remainingList );
_currentNumber = GetValue ( _remainingList ; 1 );
_currentNumberIsInSeries = If ( _currentNumber - 1 = _lastNumber ; 1 ; 0 );
_shortenedList = Case (
// This is the 1st iteration.
IsEmpty ( _shortenedList );
_currentNumber;
// The current number belongs to an active series of neighbouring numbers.
// The current number is the last number in the list.
_currentNumberIsInSeries and _remainingNumberCount = 1;
_shortenedList & "-" & _currentNumber;
// The current number belongs to an active series of neighbouring numbers.
_currentNumberIsInSeries;
_shortenedList;
// The current number does not belong to an active series of neighbouring numbers
// but the last number did. Hence, the last number terminates a series.
_lastNumberWasInSeries;
_shortenedList & "-" & _lastNumber & ", " & _currentNumber;
// Neither the last nor the current number belongs to a series of neighbouring numbers.
// We can simply add the current number.
_shortenedList & ", " & _currentNumber
);
_lastNumber = _currentNumber;
_lastNumberWasInSeries = If ( _currentNumberIsInSeries ; 1 ; 0 );
_remainingList = RightValues ( _remainingList ; _remainingNumberCount - 1 )
];
_shortenedList
)
Beispiel 2: Seitenzahlen
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Wann sind Custom Functions
sinnvoll?
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
eher sinnvoll
Wann sind Custom Functions sinnvoll?
eher nicht sinnvoll
• wiederverwenbar
• klar umrissene Funktion
• wenige bis gar keine Abhängigkeiten
• nicht allzu umfangreich und lang
• Fälle zum Testen gut erstellbar,
Testaufwand überschaubar
(Stichwort: "Unit Tests")
• einmalige Verwendung
• Abhängigkeiten zwingend gegeben
• komplex oder sehr komplex
• Funktionalität nicht nachvollziehbar
(Stichtwort: "Black Box")
• Testaufwand gross bis sehr gross
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Custom Functions
Wann sind Custom Functions sinnvoll?
FileMaker Skripten
• klar umrissene Funktionen
• wenige bis gar keine Abhängigkeiten
• nicht allzu umfangreich und komplex
• FileMaker Funktionen als Basis
• Kommentare im Code zwar möglich,
aber nicht wirklich vorgesehen
• Testing von Hand im Data Viewer
• alle Arten von Algorithmen
• mit oder ohne Abhängigkeiten
• ganz simpel bis sehr komplex
• FileMaker Skriptschritte und
FileMaker Funktionen als Basis
• umfangreiche Kommentare im Code
problemlos möglich
• Testing mit Hilfe des Debuggers
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Q & R
Vielen Dank für Ihr Interesse!
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Links auf Tools
• Custom Function Sammlungen
• https://www.briandunning.com/filemaker-custom-functions/
• https://github.com/chivalry/filemaker-custom-functions
• https://github.com/jbante/FileMaker-
Techniques/tree/master/CustomFunctions
• kostenlose Text-Editoren für Entwickler
• https://notepad-plus-plus.org/ (Windows)
• https://code.visualstudio.com/ (Win, macOS, Linux)
Plugin für FileMaker Code Highlighting verfügbar
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Vielen Dank unseren Sponsoren