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
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
Theoretische Betrachtungen
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
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
Aufbau einer Funktion
         NullWert( Wert; Null )
             Wenn( IstLeer( Wert );
             ! Null;
             // Sonst
             ! Wert
             )


            •     Funktionsname

            •     Funktionsparameter

            •     Funktionscode

            •     Funktionsergebnis




Dipl.-Ing. Arnold Kegebein                          FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen                     www.filemaker-konferenz.com
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
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
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
FileMaker Dialoge
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
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
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
Dialog: Funktionen bearbeiten




               Parameter hinzufügen             Parameter löschen


                                  Parameter umbenennen




Dipl.-Ing. Arnold Kegebein                                          FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen                                     www.filemaker-konferenz.com
Programmierung von
Eigenen Funktionen
Übersicht Programmierung
            •     Kommentare

            •     Operatoren

            •     Funktionsumfang

            •     Variablen und deren Gültigkeitsbereiche (Scope)

            •     Spezielle Funktion: SetzeVars

            •     Fortgeschrittene Programmiertechniken
                  ‣ Funktionskapselung
                  ‣ Optionale Parameter
                  ‣ Mehrere Rückgabewerte

            •     Komplexe Funktionsstrukturen
                  ‣ Rekursion
                  ‣ Schleifen
                  ‣ Wechselseitiger Funktionsaufruf


Dipl.-Ing. Arnold Kegebein                                          FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen                                     www.filemaker-konferenz.com
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
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
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
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
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
SetzeVars Beispiel
         Wenn( HoleNtenDatensatz( Test::Ergebnis; $X ) < 1,0 ODER
         HoleNtenDatensatz( Test::Ergebnis; $X ) > 1,8);
         ! "Ergebnis ausserhalb Testbereich"
         )


            •     Wiederholte Berechnung

            •     Optimierung möglich für schneller Berechnung und geringere
                  Speicherauslastung

         SetzeVars( [
         ! Ergebnis = HoleNtenDatensatz( Test::Ergebnis; $X )
         ];
         ! Wenn( Ergebnis < 1,0 ODER Ergebnis > 1,8);
         ! ! "Ergebnis ausserhalb Testbereich"
         ! )
         )


Dipl.-Ing. Arnold Kegebein                                      FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen                                 www.filemaker-konferenz.com
Variablen
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
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
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
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
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
Fortgeschrittene
Programmiertechniken
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
Funktionskapselung
          FMSQL Plug-in
           • qFMSQL_ExecuteSQL( Query {; ColumnSeparator_ASCIINumber ; RowSeparator_ASCIINumber } )

          SQL( query )
          !   qFMSQL_ExecuteSQL( query )


          DoSQL Plug-in
           • mFMb_DoSQL( sqlString {; executeOnIdle } )
           • mFMb_DoSQL_SetColumnSeparator( unicodeNumber )
           • mFMb_DoSQL_SetRowSeparator( unicodeNumber )

          SQL( query )
          !   mFMb_DoSQL( query )

          FileMaker Pro 12
           • ExecuteSQL( sqlQuery; fieldSeparator; rowSeparator {; arguments ... } )

          SQL( query )
          !   ExecuteSQL( query; "{Tab}"; ¶ )



Dipl.-Ing. Arnold Kegebein                                                            FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen                                                       www.filemaker-konferenz.com
Funktionskapselung
          FMSQL Plug-in
           • qFMSQL_ExecuteSQL( Query {; ColumnSeparator_ASCIINumber ; RowSeparator_ASCIINumber } )


          SQL( query )
              Let( [
              !   _result = qFMSQL_ExecuteSQL( query );
              !   _error = Position( _result; "Query ERROR:"; 1; 1 ) > 0;
              !   $$SQL.ERROR.MSG = If( _error; _result );
              !   $$SQL.ERROR.NO = Left( _result; 7 );
              !   $$SQL.ERROR.QUERY = If( _error; query; "" )
              ];
              !   If( _error; "?"; _result )
              )




Dipl.-Ing. Arnold Kegebein                                                           FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen                                                      www.filemaker-konferenz.com
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
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
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
Rekursionen
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
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
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
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
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
Beispiel Endrekursion
          SumN( n )                                Keine Endrekursion
             Wenn( n = 0;!0; n + SumN( n - 1 ) )


          SumN(3) !
          SumN(3) = 3 + SumN(2)
          ! SumN(2) = 2 + SumN(1)
          ! ! SumN(1) = 1 + SumN(0)
          ! ! ! SumN(0) = 0
          ! ! SumN(1) = 1 + 0 = 1
          ! SumN(2) = 2 + 1 = 3
          SumN(3) = 3 + 3 = 6




Dipl.-Ing. Arnold Kegebein                               FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen                          www.filemaker-konferenz.com
Beispiel Endrekursion
          SumN( n )
             AddSumN( 0; n )
          AddSumN( m; n )
             Wenn( n = 0;!m; AddSumN( m + n; n - 1 ) )



          SumN(3) !
          SumN(3) =           AddSumN(   0;   3   )
                  =           AddSumN(   3;   2   )
                  =           AddSumN(   5;   1   )
                  =           AddSumN(   6;   0   )
                  =           6




Dipl.-Ing. Arnold Kegebein                               FileMaker Konferenz 2012 Salzburg
Custom Functions / Eigene Funktionen                          www.filemaker-konferenz.com
Praxisbeispiele
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
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
Vielen Dank für Ihre Aufmerksamkeit




Dipl.-Ing. Arnold Kegebein               FileMaker Konferenz 2012 Salzburg
Customer Functions / Eigene Funktionen        www.filemaker-konferenz.com
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

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
  • 3.
  • 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
  • 6.
    Aufbau einer Funktion NullWert( Wert; Null ) Wenn( IstLeer( Wert ); ! Null; // Sonst ! Wert ) • Funktionsname • Funktionsparameter • Funktionscode • Funktionsergebnis 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
  • 10.
  • 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
  • 14.
    Dialog: Funktionen bearbeiten Parameter hinzufügen Parameter löschen Parameter umbenennen Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
  • 15.
  • 16.
    Übersicht Programmierung • Kommentare • Operatoren • Funktionsumfang • Variablen und deren Gültigkeitsbereiche (Scope) • Spezielle Funktion: SetzeVars • Fortgeschrittene Programmiertechniken ‣ Funktionskapselung ‣ Optionale Parameter ‣ Mehrere Rückgabewerte • Komplexe Funktionsstrukturen ‣ Rekursion ‣ Schleifen ‣ Wechselseitiger Funktionsaufruf 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
  • 22.
    SetzeVars Beispiel Wenn( HoleNtenDatensatz( Test::Ergebnis; $X ) < 1,0 ODER HoleNtenDatensatz( Test::Ergebnis; $X ) > 1,8); ! "Ergebnis ausserhalb Testbereich" ) • Wiederholte Berechnung • Optimierung möglich für schneller Berechnung und geringere Speicherauslastung SetzeVars( [ ! Ergebnis = HoleNtenDatensatz( Test::Ergebnis; $X ) ]; ! Wenn( Ergebnis < 1,0 ODER Ergebnis > 1,8); ! ! "Ergebnis ausserhalb Testbereich" ! ) ) Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
  • 23.
  • 24.
    Globale und lokaleVariablen • 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
  • 29.
  • 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
  • 31.
    Funktionskapselung FMSQL Plug-in • qFMSQL_ExecuteSQL( Query {; ColumnSeparator_ASCIINumber ; RowSeparator_ASCIINumber } ) SQL( query ) ! qFMSQL_ExecuteSQL( query ) DoSQL Plug-in • mFMb_DoSQL( sqlString {; executeOnIdle } ) • mFMb_DoSQL_SetColumnSeparator( unicodeNumber ) • mFMb_DoSQL_SetRowSeparator( unicodeNumber ) SQL( query ) ! mFMb_DoSQL( query ) FileMaker Pro 12 • ExecuteSQL( sqlQuery; fieldSeparator; rowSeparator {; arguments ... } ) SQL( query ) ! ExecuteSQL( query; "{Tab}"; ¶ ) Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
  • 32.
    Funktionskapselung FMSQL Plug-in • qFMSQL_ExecuteSQL( Query {; ColumnSeparator_ASCIINumber ; RowSeparator_ASCIINumber } ) SQL( query ) Let( [ ! _result = qFMSQL_ExecuteSQL( query ); ! _error = Position( _result; "Query ERROR:"; 1; 1 ) > 0; ! $$SQL.ERROR.MSG = If( _error; _result ); ! $$SQL.ERROR.NO = Left( _result; 7 ); ! $$SQL.ERROR.QUERY = If( _error; query; "" ) ]; ! If( _error; "?"; _result ) ) 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 beiEigenen 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
  • 36.
  • 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 / TailRecursion • 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
  • 42.
    Beispiel Endrekursion SumN( n ) Keine Endrekursion Wenn( n = 0;!0; n + SumN( n - 1 ) ) SumN(3) ! SumN(3) = 3 + SumN(2) ! SumN(2) = 2 + SumN(1) ! ! SumN(1) = 1 + SumN(0) ! ! ! SumN(0) = 0 ! ! SumN(1) = 1 + 0 = 1 ! SumN(2) = 2 + 1 = 3 SumN(3) = 3 + 3 = 6 Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
  • 43.
    Beispiel Endrekursion SumN( n ) AddSumN( 0; n ) AddSumN( m; n ) Wenn( n = 0;!m; AddSumN( m + n; n - 1 ) ) SumN(3) ! SumN(3) = AddSumN( 0; 3 ) = AddSumN( 3; 2 ) = AddSumN( 5; 1 ) = AddSumN( 6; 0 ) = 6 Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg Custom Functions / Eigene Funktionen www.filemaker-konferenz.com
  • 44.
  • 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 EigeneFunktion _( ) • 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ürIhre Aufmerksamkeit Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg Customer Functions / Eigene Funktionen www.filemaker-konferenz.com
  • 48.
    Vielen Dank unserenSponsoren Danke für das Bewerten dieses Vortrages Dipl.-Ing. Arnold Kegebein FileMaker Konferenz 2012 Salzburg Customer Functions / Eigene Funktionen www.filemaker-konferenz.com