はじめに
システム開発担当の「ほうがん」です。
今回紹介いたしますのがFileMakerの「カスタム関数」作成機能です。「カスタム関数」のざっくりした説明を行いますと、必要な計算機能を持ったユーザー独自の関数を開発者側で独自で追加する事が出来ます。このカスタム関数作成機能はFileMaker PRO Ver.7から実装されていますが、使いこなせば色々と重宝します。そのメリットを以下にいくつか上げますと
1,毎回同じ記述をするような計算フィールドをシンプルに出来ます。
2,作成したカスタム関数は他のファイルにインポートして使用する事が出来ます。
3,計算フィールドにカスタム関数を使うことで、ファイル内の複数の計算フィールドの内容を一気に変更する事が出来ます。
4,スクリプト内でカスタム関数を使うことで、スクリプトを変更することなく、処理内容を一気に変更する事が出来ます。
5,他の人が時間を掛けて作ったカスタム関数もインポートして使えます。
「カスタム関数」の作成方法
以下、FileMaker Pro19以降の説明となります。
※FileMaker Pro 18 以前の場合は開発用のFileMaker Pro Advanced版が必要です。
事前準備 FileMaker Proを開発者モードに変更
FileMakerの環境設定を開いて、高度なツールを使用するにチェックしFileMaker Proを終了し再度起動します。
※既に「高度な機能を使用する」をチェックされている方はこの操作は不要です。
簡単なカスタム関数作成
カスタム関数はファイルごとに作成されますので、対象のデータベースを開いて
ファイル>管理>カスタム関数を選択します。
選択するとダイアログが出ます。
新規をクリックすると新しくカスタム関数を作成に入ります。
・左上の「新規関数」部分にカスタム関数名を設定します。
・中段の「関数の引数」の設定で引数が作成できます。
※Abs ( 数値 ) の()内「数値」部分が引数です。複数の引数を作ることも出来ます。
・下段の「新規関数()」の中に関数を記述します。
引数を使わない簡単なものから始めてみます。
1,本日の日付を取得するカスタム関数「CF_本日」を作ってみます。
※接頭部の「CF_」は Custom Functionの略で使用しています。
これでOKを押せば「CF_本日」という本日の日付が取得できるカスタム関数が出来ます。
2,少し発展させて「販売日」の日付フィールドから販売年月の末日をカスタム関数化してみます。
カスタム関数名「CF_末日」で、「年月日」という引数を作成します。
※引数は既存関数で説明すると LEFT( テキスト ; 文字数 )の()内、「テキスト」「文字数」の2つが引数です。
引数の作成方法は、関数の引数欄に引数名を入れて赤枠の「+」ボタンを押します。
最後に引数「年月日」を使用して計算式を組み立てます。式は以下の通りです。
Date ( Month ( 年月日 ) + 1 ; 0 ; Year ( 年月日 ) )
※対象月の末日は翌月1日の1日前ですので、日-1で「0」で求めることが出来ます。
これで「OK」を押すとカスタム関数「CF_末日」が出来ます。
実際に使用してみます。
比較のため計算フィールドで作成した場合とカスタム関数を使用した場合でフィールド作成します。
「販売日の末日」を計算する計算式で構成される計算フィールドでもカスタム関数を使用すれば短く記載できるのがするのがわかります。
今回は記載が少ない方ですがWhile関数やCase関数を使用した多分岐の式などは、計算式で作成すると膨大な記載となる場合が多々あります。これをカスタム関数を使用すると「CF_XXXX ( YY ; ZZ )」で終わりです。
実際にレコードを表示してみます。カスタム関数を使用した場合も計算フィールドと同じ結果が表示されています。
それでは応用編です。
3,消費税税率をカスタム関数化
消費税はこれまでに以下の様に変更されています。今後も変更されると思われます。
1989年4月1日以降 3%
1997年4月1日以降 5%
2014年4月1日以降 8%
2019年10月1日以降 8,10%混在
消費税を計算するフィールドを考えてみます。
10%の税率として単純に計算フィールドで作成すると
c_消費税 = 税抜き金額 * 0.1
となります。
複数ファイルで構成された販売経理システムなどでは、この消費税を計算する箇所が数十数百か所あるような場合があります。
仮に20XX年XX月XX日に消費税が13%になった場合には、数十数百の計算フィールドを開きながら
c_消費税 = 税抜き金額 * Case ( 消費税変更日 > Get ( 日付 ) ; 0.1 ; 0.13 )
に1つも抜けることなく変更が必要です。大がかりなシステムだと気が遠くなりそうな作業量です。
この「Caseの消費税部分」をカスタム関数にしておくとどうでしょうか?
c_消費税 = 税抜き金額 * CF_税率( 販売日 ; F_軽減税率対象_1 )
以上でおしまいです。式もシンプルです。
今後消費税が変更された場合はこのカスタム関数の変更だけで消費税を使用している計算フィールドが数万あろうと、ファイル数分のカスタム関数「CF_税率」を修正すれば消費税部分の修正が終わります。
おわりに
今回、カスタム関数の紹介をさせていただきました。
他にも、誕生日から年齢を求める関数、スクリプトエラーをトラップする関数などの作成もお勧めです。
非常に有用な機能ですのでぜひご活用ください。