FMK2012: Eigene Funktionen / Custom Functions von Arnold Kegebein
1. Eigene Funktionen / Custom Functions
Von den Grundlagen zu
fortgeschrittenen Programmiertechniken
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
2. Zu meiner Person
• Diplom-Ingenieur der Technischen Informatik
• 6½ Jahre in den USA als IT Manager
• Seit 2006 Entwicklung mit FileMaker
• 25 Jahre Datenbankerfahrungen: Access, Oracle, MySQL, u. a.
• Hohe Aufmerksamkeit auf Usability und Design
• Regelmäßiger Autor im FileMaker Magazin
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
4. Eigene Funktionen
• Was ist eine Funktion?
„Eine vordefinierte, benannte Formel, die eine spezielle Berechnung durchführt und
einen eindeutigen einzelnen Wert liefert.“ (FileMaker Pro 11, Hilfe, Glossar)
• Wieso »Eigene« Funktion?
Es gibt drei verschiedene Gruppen von Funktionen:
‣ FileMaker Funktionen
sind im Programm direkt eingebaut
‣ Externe Funktionen
als Schnittstelle zu Plugins
‣ Eigene Funktionen
vom Entwickler frei programmiert
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
5. Eigene Funktionen
Eine Eigene Funktion …
• ist eine gespeicherte Formel
• hat keinen, einen oder mehrere Eingabewerte (Parameter)
• gibt genau einen Wert zurück
• wird wie eine normale FileMaker Funktion verwendet
• ist nur im verwendeten Modul bekannt
• kann zwischen Modulen kopiert werden
• kann in FileMaker Pro aufgerufen, aber nur mit FileMaker Pro
Advanced erstellt und modifiziert werden
• kann im Zugriff beschränkt sein (Anwenderrechte)
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
7. Funktionsname
• Der Name muss eindeutig sein
• Darf nicht länger als 100 Zeichen sein
• Darf bestimmte Zeichen nicht enthalten:
+ - * / ^ & = ≠ < > ≤ ≥ ( , ; ) [ ] " :: $ }
• Darf Leerzeichen enthalten
• Darf nicht mit einer Ziffer, Punkt oder Leerzeichen beginnen
• Darf nicht UND, ODER, XODER, NICHT enthalten
• Darf nicht den gleichen Namen wie eine Funktion, ein Parameter
der aktuellen Funktion oder ein Schlüsselwort sein
• Vorsicht bei mehrsprachigen Arbeitsumgebungen
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
8. Funktionsparameter
• Es muss kein Parameter angegeben werden
• Der Parametername unterliegt den gleichen Beschränkungen
wie der Funktionsname
• Die Reihenfolge der Parameter hat Bedeutung
• Es gibt keine optionalen Parameter, d. h. definierte Parameter
müssen im Funktionsaufruf berücksichtigt werden
• Die Parameter müssen im Funktionscode nicht vorkommen
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
9. Funktionscode und Rückgabewert
• Es ist keine Programmiersprache.
• Der Code besteht aus einer einzigen Formel.
• Das Ergebnis der Formel ist der Rückgabewert der Funktion.
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
11. Dialog: Funktionen verwalten
• Aufruf: Ablage > Verwalten > Eigene Funktionen…
Funktionen aus anderen
Modulen importieren
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
12. Dialog: Funktionen importieren
• Aufruf: Ablage > Verwalten > Eigene Funktionen… > Importieren
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
13. Funktionen importieren
• Es werden nur Funktionen importiert, keine Bezugsobjekte, etc.
• FileMaker überwacht und „korrigiert“ Funktionen beim Import
• Es wird eine Importzusammenfassung und Protokoll erzeugt
• Gleichheit im Funktionsnamen wird
durch einen Zähler ausgeglichen
• Verweise auf andere Eigene
Funktionen werden zuerst auf
die gleichzeitig importierten
Funktionen angewand, sonst
auf schon existierende CFs
• Bei fehlenden Verweisen wird
der gesamte Code in einen Kommentar umgewandelt
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
17. Kommentare
• Zeilenkommentare
Hole( LetzteFehlerNr ) = 109 // Berechtigung fehlt
‣ Vom // bis zum Zeilenende
• Blockkommentare
Auswahl( x; "" /* Null */; 100; 250; 333; 500; 750 )
‣ Vom /* bis zum entsprechenden */
‣ Kann sich über mehrere Zeilen erstrecken
‣ Blockkommentare können verschachtelt werden
• Auswertungspriotität von Zeilen- und Blockkommentaren ist
abhängig von der Verarbeitungsreihenfolge
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
18. Operatoren
• Alle bekannten Operatoren aus FileMaker
Standarddialogen können verwendet werden
• Rechenoperatoren: + - * / ^
• Textoperatoren: " " & ¶
• Klammern: ( )
• Vergleichsoperatoren: = ≠ > < ≥ ≤
• Logische Operatoren: UND ODER XODER NICHT
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
19. Funktionsumfang
• Fast alle internen FileMaker Funktionen
‣ Ausnahme: Selbst
‣ Landesspezifische Sprache und immer Englisch
• Alle Externen Funktionen (von Plug-ins)
• Alle Eigenen Funktionen
‣ Einschließlich sich selbst (Rekursion)
• Alle Tabellenfelder, die im Modul definiert bzw. referenziert
sind
‣ Keine Eingabehilfe für die Feldauswahl im Dialog
‣ Wenn Bezüge bei Funktionsaufruf nicht bestehen, dann gibt
die Funktion einen Fehler zurück.
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
20. SetzeVars
• SetzeVars erlaubt die Zusammenfassung mehrerer Ausdrücke
‣ Um wiederholte Berechnungen zu vermeiden
‣ Um Ausdrücke übersichtlicher zu strukturieren
• Mit SetzeVars können Variablen definiert werden
‣ Globale Variablen
‣ Lokale Variablen
‣ Einfache Variablen
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
21. SetzeVars
SetzeVars( [
! $$GLOBAL = "globale Variable";
Variablendeklarationen
! $Lokal = "lokale Variable";
! _Einfach = "einfache Variable"
];
! "Heute ist der "
! & Ausdruck mit Rückgabewert
Hole( SystemDatum )
)
• SetzeVars erlaubt die Deklaration von einer oder mehreren
Variablen
• SetzeVars erwartet einen Ausdruck, dessen Ergebnis der
Rückgabewert der Funktion ist
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
24. Globale und lokale Variablen
• Globale Variable: $$Variable
• Lokale Variable: $Variable
• Variablen müssen nicht definiert werden
• Variablen werden durch Wertzuweisung bekannt gemacht
• Durch Zuweisung von "" wird die Variable wieder entfernt
• Variablen können Wiederholungen haben
‣ Anzahl der Wiederholungen müssen nicht definiert werden
• Variablen können direkt in der Datenanzeige überwacht und
auch verändert werden
‣ Lokale Variablen nur während der Laufzeit eines Scripts
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
25. Einfache Variablen
• Werden in SetzeVars definiert
• Müssen definiert werden, bevor sie verwendet werden
• Können keine Wiederholungen haben
• Können nur per Überwachung in der Datenanzeige dargestellt,
aber nicht verändert werden
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
26. Gültigkeitsbereich von Variablen
Modul A Globale Variablen
Script 1 $$X = "global" • Im gesamten Modul
bekannt, in dem sie
Script 1-1 $$X = "global" definiert werden
Script 1-2 $$X = "global" • Können überall im Modul
geändert werden; neuer
Wert ist im gesamten
Script 2 $$X = "global" Modul sichtbar
Script 2-1 $$X = "global"
• Unbekannt in anderen
Modulen
Modul B
Script 3
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
27. Gültigkeitsbereich von Variablen
Modul A Lokale Variablen
Script 1 $X = "lokal" • Nur in dem Script
bekannt, in dem sie
Script 1-1
definiert werden
Script 1-2
• Untergeordnete Scripts
können eine Variable mit
dem gleichen Namen
Script 2 definieren, ohne dadurch
Script 2-1 den Wert der anderen
Variable zu verändern
Modul B
Script 3
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
28. Gültigkeitsbereich von Variablen
Script 1 Einfache Variablen
SetzeVars _X = "einfach" • Werden in der Funktion
SetzeVars _X = "temp" SetzeVars erstellt
• Sind nur im gleichen oder
SetzeVars untergeordneten SetzeVars-
Konstrukten bekannt
SetzeVars
• Untergeordnete SetzeVars-
Konstrukte können zeit-
weilig den Wert ändern,
aber der ursprüngliche
Wert wird beim Verlassen
wieder hergestellt
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
30. Funktionskapselung
• Aufgaben einer Funktionskapselung:
‣ Vereinfachung des Funktionsaufrufs
‣ Funktionssicherheit
• Vergleichbar mit einer Black Box
‣ Eingabewerte und Ausgabewerte sind kontrollierbar
‣ Änderungen in der Black Box dringen nicht nach außen
• Empfohlen für Externe Funktionen (Plug-ins)
‣ Wechsel des Plug-ins erfordert anderen Funktionsaufruf
‣ Neue Plug-in Version verändert die erforderlichen Parameter
‣ Standardaufruf erfordert nur wenige Parameter
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
33. Optionale Parameter
• Optionale Parameter müssen nicht angegeben werden
• Wenn nicht angegeben, wird intern ein Vorgabewert verwendet
• Vorteile von optionalen Parametern:
‣ Vereinfachung (kürzerer Aufruf im Standardfall)
‣ Fehlerverringerung (weniger Angaben = weniger Fehler)
‣ Flexiblere Funktionen, da vielseitiger nutzbar
• FileMaker interne Funktionen und Externe Funktionen kennen
optionale Parameter, Eigene Funktionen leider nicht
FensterNamen( {Dateiname} )
Wenn( Bedingung; ErgebnisWennWahr {; ErgebnisWennFalsch} )
Liste( Feld {; Feld...} )
Austauschen( Text; [Suche1; Ersatz1] {; [Suche2; Ersatz2]; ...} )
SetzeVars( {[} Var1 = Term1 {; Var2 = Term2... ]}; Rechenanweisung )
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
34. Optionale Paramter bei Eigenen Funktionen
• Reguläre Parameter
‣ Bei Standardaufruf wird ein Leertext übergeben
Alpha( Notwendig; {Optional} )
Aufruf: Alpha( "Lorem ipsum"; _ )
• Option Parameter
‣ Ein Text übernimmt beliebig viele zusammensetzte Optionen
Beta( Notwendig; {Optionen} )
Aufruf: Beta( 475/12; "Einheit=€ Genauigkeit=2" )
• Lokale oder globale Variablen
Gamma( Notwendig )
Aufruf: SetzeVars( $Gamma.Option = "xyz"; _ ) & Gamma( “LiLaLu” )
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
35. Mehrere Rückgabewerte
• Lokale oder globale Variablen
• Geeignete Namen wählen: z. B. $CFName.Ergebnis
• Variablen können auch Wiederholungen haben
$$CF.Name[1], $$CF.Name[2], …
• Variablen sollten immer in der Funktion initialisiert werden
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
37. Rekursion
• Rekursion bedeutet, die Funktion ruft sich selbst auf
• Direkter oder indirekt Aufruf (Funktion A ruft Funktion B auf,
die wiederum Funktion A aufruft)
• Eine Abbruchbedingung ist erforderlich, um die Rekursion
abzubrechen
• FileMaker:
max. insgesamt 50.000 rekursive Aufrufe
max. 10.000 Aufrufe in einem Call Stack
• Rekursionen potenzieren die Möglichkeiten von Funktionen
‣ Programm- und Zahlschleifen
‣ Listen- und Kettenverarbeitungen
‣ Komplexe „Programmierungen“ innerhalb einer Funktion
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
38. Beispiel Rekursion
Aufgabe:
Ein Text soll beliebig oft wiederholt werden
Name:
Wiederholen
Parameter:
Text
(Text)
Der zu wiederholende Text
Anzahl
(Zahl)
Anzahl der Wiederholungen
Rückgabe:
(Text)
Der wiederholte Text
Rekursion:
Text ausgeben
Abbruch:
Nach der n-ten Wiederholung
→ Schleifenzähler
→ Initialisierung, Inkrementierung, Überprüfung
Initialisierung:
Autom. beim Funktionsaufruf (Parameterübergabe)
Inkrement:
Beim rekursiven Funktionsaufruf: Anzahl - 1
Überprüfung:
Anzahl < 1
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
39. Beispiel Rekursion
Wiederholen( Text; Anzahl )
• Text ist ein gültiger Variablenname
• Anzahl ist in einer deutscher Arbeitssumgebung nicht erlaubt
• In einer englischen Umgebung kann dagegen Anzahl als
Parametername verwendet werden
‣ Beim Wechsel in eine deutsche Umgebung arbeitet die
Eigene Funktion weiterhin korrekt
‣ Sie kann dann aber nicht mehr leicht geändert werden
• Empfehlung: Parameter und einfache Variablen sollten daher in
einer Funktion immer mit einem Unterstrich beginnen
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
40. Beispiel Rekursion
Wiederholen( _Text; _Anzahl ) Kein Abbruch
_Text & Wiederholen( _Text; _Anzahl - 1 )
Wiederholen( _Text; _Anzahl ) Abbruchbedingung
Wenn( _Anzahl ) < 1;
! // Abbruch der Rekursion
// Sonst
! _Text & Wiederholen( _Text; _Anzahl - 1 )
)
Wiederholen( _Text; _Anzahl ) Rekursionsbedingung
Wenn( _Anzahl ≥ 1;
! _Text & Wiederholen( _Text; _Anzahl - 1 )
)
• Statt einer Abbruchbedingung kann man auch eine
Rekursionsbedingung schreiben
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
41. Endrekursion / Tail Recursion
• FileMaker ist Endrekursion-optimiert
• Endrekursionen erhöhen nicht den Aufrufstapel (call stack)
• Endrekursiv bedeutet, der rekursive Funktionsaufruf ist die
letzte Aktion zur Berechnung des Funktionswertes
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
45. Beispiel Summenfunktion
SumN( n )
AddSumN( 0; n )
AddSumN( m; n )
Wenn( n = 0;!m; AddSumN( m + n; n - 1 ) )
SumN( n; m )
Wenn( n = 0;
! m;
// Sonst
! SumN( n - 1; GetAsNumber( m ) + n )
)
SumN( n )
( n * ( n + 1 ) ) / 2
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
46. Die einfachste Eigene Funktion
_( )
• Die einfachste Funktion besteht aus einem einzigen Zeichen
• Der Name ist notwendig; der Unterstrich gehört zu den
erlaubten Zeichen
• Kein Parameter erforderlich
• Kein Funktionscode erforderlich
• Der Rückgabewert der Funktion: eine leere Zeichenfolge
• Einsatzgebiete dieser Funktion:
‣ Als Platzhalter für „optionale“ Funktionsparameter
‣ Erleichterung im Einsatz mit FileMaker Funktion Berechne
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
47. Vielen Dank für Ihre Aufmerksamkeit
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Customer Functions / Eigene Funktionen www.filemaker-konferenz.com
48. Vielen Dank unseren Sponsoren
Danke für das Bewerten dieses Vortrages
Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg
Customer Functions / Eigene Funktionen www.filemaker-konferenz.com