2. 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
3. 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?
4. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
FileMaker Funktionen als Grundlage
von Custom Functions
5. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
6. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
7. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
?
8. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
9. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
10. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
11. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
12. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
13. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
14. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
15. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
16. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
17. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
18. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
19. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
20. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionen in der FileMaker
Entwicklungsumgebung
21. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionsreferenz in FileMaker Hilfe
22. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Funktionsreferenz in FileMaker Hilfe
23. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Wie erstellt man Custom Functions?
Teil 1
24. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Erstellung von Custom Functions
25. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Erstellung von Custom Functions
26. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Erstellung von Custom Functions
27. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Erstellung von Custom Functions
28. 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 )
29. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
30. 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.
31. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
32. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
33. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
34. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
35. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
36. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
37. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
38. 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"
)
39. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
40. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
41. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
42. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
43. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
44. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
45. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
46. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
47. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
ein ganz einfaches Beispiel
48. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Eigenschaften von Custom Functions
49. 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
50. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Wie erstellt man Custom Functions?
Teil 2
51. 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
)
52. 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
)
54. 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
55. 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.
56. 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
)
)
57. 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 )
58. 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
59. 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
)
)
60. 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.
61. 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
62. 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
)
64. 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
65. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Wann sind Custom Functions
sinnvoll?
66. 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
67. 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
68. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Q & R
Vielen Dank für Ihr Interesse!
69. 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
70. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Custom Functions für Einsteiger – Thomas Hirt
Vielen Dank unseren Sponsoren