Gespeichert von FileMaker Entwickler am Mo, 03/16/2020 - 10:02

SkriptParameter mit CustomFunction übergeben

Es gibt verschiedene Möglichkeiten, wie der FileMaker Entwickler bei einem Skriptaufruf gleich mehrere verschiedene Parameter an ein Skript übergeben kann.

Unsere bevorzugte Methode ist die Übergabe per Custom Function. Auch CustomFunctions gibt es verschiedene (siehe CustomFunctions bei Brian Dunning). Unsere Lösung besteht aus 2 CustomFunctions, die die Werte nach Werteschlüssel pKey und dazugehörigem Wert pValue in einer per Zeilenumbruch formatierten Liste übergeben:

  • _sp = (beliebig viele) Parameter (in eine spezielle Syntax) setzen
  • _gp = einen speziellen Wert abfragen

 

CustomFunction _sp

Diese CustomFunction wird beim Aufruf eines Skriptes im Bereich für die optionalen Skriptparameter angegeben:

 

Name: _sp

Parameter:
pKey
pValue

Funktion:

Trim ( Substitute ( pKey; [ ¶ ; "" ] ; [ "=" ; "" ] ) ) & "=" & Quote ( pValue) & ¶

Beispiel:

Der Klick auf einen Button führt das Skript "100 Skriptparameter als Text übergeben" aus. Der optionale Skriptparameter ist
_sp ( "Programm" ; "FileMaker" ) & _sp ( "Person1" ; "Entwickler" ) & _sp ( "Person2" ; "Developer" )

Wenn man sich im DataViewer den SkriptParameter mit Get ( ScriptParameter ) anzeigen lässt, sieht man, dass es sich um eine Liste von Werten handelt:

Programm="FileMaker"
Person1="Entwickler"
Person2="Developer"

Die Liste könnte beliebig lang sein.

CustomFunction _gp

Diese CustomFunction dient dem gezielten Abfragen eines bestimmten Schlüssels. Es ist eine rekursive Funktion, die sich selbst so lange aufruft, bis entweder eine "Zeile" gefunden wird, die den angegeben Schlüssel enthält, oder die Liste ohne Ergebnis durchsucht wurde.

Name: _gp

Parameter:
ppList
ppKey

Code:

Case ( IsEmpty ( ppList ) ; "" ;

Let ( [

ppKey = Trim ( Substitute ( ppKey ; [ ¶ ; "" ] ; [ "=" ; "" ] ) ) ;
 
~first = GetValue ( ppList ; 1 ) ;
~tz = Position ( ~first; "=" ; 1 ; 1 ) ;
~Key1 = Trim ( Left ( ~first; ~tz - 1 ) ) ;
~Value1 = Right ( ~first ; Length ( ~first) - ~tz ) ;
~rest = RightValues ( ppList ; ValueCount ( ppList) - 1 ) ] ;

Case  ( ~Key1 = ppKey; Evaluate ( ~Value1 ) ; _gp ( ~rest ; ppKey ) )

) )

Beispiel:
_gp (Get ( ScriptParameter ); "Programm") & " " & _gp (Get ( ScriptParameter ); "Person1")

ergibt den Text FileMaker Entwickler

_gp (Get ( ScriptParameter ); "Programm") & " " & _gp (Get ( ScriptParameter ); "Person2")

ergibt den Text FileMaker Developer

Vorteile dieser Lösung

Die Übergabe der Parameter mit diesen CustomFunctions bietet folgende Vorteile:

  • Keine zusätzlichen Tabellen oder Felder erforderlich
  • Funktioniert auch mit älteren FileMaker Versionen
  • beliebig viele Parameter
  • beliebige Reihenfolge der Parameter
  • die Werte dürfen Zeilenumbrüche enthalten
  • Werte lassen sich überschreiben (siehe "zu beachten")

Zu beachten

Ein Parameter kann mit einem neuen Wert "überschrieben" werden. Die CustomFunction _sp überschreibt aber nicht den Parameter selbst, sondern setzt den neuen Wert VOR den alten.

Beispiel:

Ein Skript erhält die folgenden Skriptparameter:
_sp ( "Programm" ; "FileMaker" ) & _sp ( "Person1" ; "Entwickler" )

Die Liste von Werten enthält zu diesem Zeitpunkt:
Programm="FileMaker"
Person1="Entwickler"

Die Abfrage
_gp (Get ( ScriptParameter ); "Programm") & " " & _gp (Get ( ScriptParameter ); "Person1")

ergibt den Text FileMaker Entwickler

Nehmen wir an, das "Skript 100"ruft das nächste "Skript 200" auf, und es sollen folgende Parameter übergeben werden:

  1. alle Skriptparameter, die das "Skript 100" empfangen hat
  2. ein neuer Wert für Person1 = Developer

Der Skriptaufruf wäre PerformScript "Skript 200" und als "optionale Parameter" würde folgender String übergeben werden:

_sp ( "Person1" ; "Developer" ) & Get ( ScriptParameter )

Wichtig ist, dass der neue Parameter vor den alten Parametern aus "Skript 100" angegeben wird. Die Liste der Werte die Skript 200 als Parameter erhält sieht dann so aus:

Person1="Developer"
Programm="FileMaker"
Person1="Entwickler"

Wie man sieht, ist der alte Wert im Array noch vorhanden, wird aber bei der Abfrage des Wertes mit _gp nicht zurückgegeben, da die CustomFunction nur nach dem ersten Auftreten des Schlüssels sucht.

Die Abfrage
_gp (Get ( ScriptParameter ); "Programm") & " " & _gp (Get ( ScriptParameter ); "Person1")

ergibt den jetzt Text FileMaker Developer

 

 

 

 

 

 

Mamtemic GmbH:
FileMaker Entwicklung, FileMaker Programmierung, Individuelle Datenbanklösungen, Speziallösungen, Web Applications, Auswertungen & Berichte, Außendienst Steuerung, Spezial Kalkulationen,Datenkonvertierung
FileMaker Development in Hamburg, Deutschland und Europa, FileMaker Consulting in Norddeutschland