3-3. 作成したカスタム関数の動作確認
実際にこのカスタム関数がFileMaker Proの計算フィールドで使用できるかを確認してみましょう。
カスタム関数の実験を行うために計算フィールドを作成します。 計算フィールドの作成方法については連載の第3回などを参照してください。
カスタム関数の実験を行うために計算フィールドを作成します。[ファイル]メニューから[管理]-[データベース...]を選択し、「データベースの管理」ダイアログボックスを表示させます。つぎに新しくフィールドを作成したいテーブルを選択した状態で「フィールド」タブをクリックします。
まず、引数用のフィールドを作成します。「フィールド名」欄に「元データ」と入力し、タイプは[テキスト]を選択し、[作成]ボタンをクリックします。同じ要領で、セパレータ用のフィールド「セパレータ」を[テキスト]タイプで、抽出位置用のフィールド「取り出し位置」を[数字]タイプでそれぞれ作成します。
引数用のフィールド作成ができたら、作成したカスタム関数GetArg
を使用するための計算フィールドを作成します。
フィールド名は「取り出し文字列」、タイプは[計算]で作成します。計算フィールドは[作成]ボタンがクリックされると、計算式の定義用に「計算式の指定」ダイアログボックスが表示されます。
計算式の一部としてカスタム関数を使用するために、関数リストにカスタム関数を表示させます。関数リストの上にある「表示」ポップアップから[カスタム関数]を選択すると、作成したカスタム関数「GetArg ( Data ; GetDataSep ; GetPosition )」が表示されます。
関数リストから「GetArg ( Data ; GetDataSep ; GetPosition )」をダブルクリックすることによって、カスタム関数を選択することができます。
次に、カスタム関数のそれぞれの引数に、先に作成した置いたフィールドを指定します。
GetArg ( 元データ ; セパレータ ; 取り出し位置 )
引数の指定ができたら、ダイアログボックスの最下部にある「計算結果」ポップアップから[テキスト]を選択して、[OK]ボタンで「計算式の指定」ダイアログボックスを閉じます。
ブラウズモードで、実際に引数に値を指定して実験してみます。
フィールド | 値 |
元データ | 富士山|桜島|浅間山|普賢岳|三原山 |
セパレータ | | |
取り出し位置 | 4 |
各引数に値を設定し、フィールドを確定すると、「元データ」フィールドの「4」番目の文字列を抽出する指定になりますので、「取り出し文字列」フィールドには「普賢岳」が表示されます。
このように、複雑な計算式であってもカスタム関数として定義してしまえば、計算フィールドやスクリプトステップ内の計算式をシンプルにすることができます。また、何より複雑な計算式をカスタム関数化することで、計算式の再利用が容易に行えるようになります。
3-4. カスタム関数の再帰処理
カスタム関数の作成方法と簡単な使用方法について解説しましたが、カスタム関数内の計算式で同じカスタム関数を使用する再帰処理について触れておきます。
Let ( [ Letterlength = Length ( Letter ) ] ; Case( Letterlength > 0 ; Letter &"ヲ" & PyramidText ( Left ( Letter ; Letterlength - 1 ) ) ) )
このカスタム関数は、引数「Letter」で指定された文字列から、1文字ずつ減らしながら改行区切りのテキストを作成します。
例えば、引数「Letter」に「株式会社ジェネコム」と入力されていた場合、関数の戻り値は次のようになります。
株式会社ジェネコム 株式会社ジェネコ 株式会社ジェネ 株式会社ジェ 株式会社ジ 株式会社 株式会 株式 株
このカスタム関数の特徴的な部分は、関数内の計算式で自分自身の関数PyramidText
を使用している所です。このようにカスタム関数の中で同じカスタム関数を実行できるので、同じ処理を繰り返して実行するような、ループ処理を行うことが可能です。
上記の例では、カスタム関数PyramidText
の引数Letter
の内容を、Left
関数を使用して1文字分短くした値を引数にしてカスタム関数PyramidText
を実行しています。カスタム関数内の計算式では、引数Letter
の内容を単に改行区切りで結合しているだけですので、上記の結果のように元の「株式会社ジェネコム」という文字列が1文字ずつ最後の文字まで短くなって結合されていくのです。
カスタム関数の再帰処理はとても便利な機能ですが、再帰処理を終了させるタイミングも気にしなければなりません。上記の例では、「Case(Letterlength > 0 ;・・・」という条件判断を行い、引数Letter
の長さが「0」よりも大きな値の場合には処理を行い、「0」になった場合には処理が実行されずにカスタム関数の計算式が終わるようになっています。このような処理になっていない場合には、不必要なループ(無限ループ)を発生させてしまいますので注意が必要です。
ここまでは、カスタム関数の解説を行ってきました。
FileMaker Proではこのようにカスタム関数として、FileMaker Proに新たな関数を登録することが可能なので、開発者が独自に作成したカスタム関数をデータベースファイルへライブラリ化しておくことで、システム開発の効率を高めることが可能です。