Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

カスタム関数/プラグインによるFileMaker Proの機能拡張

第11回 FileMakerプラグイン作成の基礎

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/05/21 15:00

この連載では、システム開発において採用が増えつつある「FileMaker」というデータベースソフトウェアについて、最前線で活躍するエンジニアがリレー形式でその魅力を紹介します。第11回は、カスタム関数とプラグインによるFileMaker Proの機能拡張を解説していきます。

1. はじめに

 このリレー連載も大詰めとなってきましたが、ここまでFileMaker ProやFileMaker Server Advancedが基本的に備えている機能の使用方法を中心に解説を進めてきました。

 今回はFileMaker Proのカスタム関数とプラグインという、FileMaker Proを拡張する機能に関して解説を行い、FileMaker Proの可能性の広さを理解してもらいたいと思います。

2. カスタム関数とは

2-1. カスタム関数は開発者が登録できるユーザー関数

 まずはじめに、FileMaker Proの「カスタム関数」について簡単に説明をしましょう。カスタム関数とは、FileMaker Pro Ver.7から追加された機能で、あらかじめ用意されている243個の関数(Ver.9)の他に、開発者が計算式や既存の関数を組み合わせて独自に作成することのできる、いわゆるユーザー定義関数のことです。

 このカスタム関数を作成するための機能は、FileMaker Pro Advencedにのみ搭載されているため、通常のFileMaker Proではカスタム関数を作成することができませんが、FileMaker Pro Advencedによってデータベースに組み込まれたカスタム関数を使用することは可能です。

2-2.FileMaker Pro Advacedでのみ作成可能

 先述のように、カスタム関数を作成するにはFileMaker Pro Advacedが必要になります。

 FileMaker Pro Advacedを使用して作成したカスタム関数は、作成するときに使用したデータベースファイル内に保存されます。ここで注意をしておかなくてはならない点としては、カスタム関数は「データベースファイルに組み込まれる」ということです。従って、一度作成したカスタム関数を別のデータベースファイルで使用したい場合は、別のファイルを開いた状態で、新たに作成し直す必要があります。 作成し直すと言っても、関数自体は計算式ですので、カスタム関数の計算式部分をコピーして、別のデータベースファイルへ貼り付け(ペースト)するだけです。

 FileMaker Proによるシステム開発を仕事としている筆者のようなエンジニアは、あらかじめカスタム関数を定義しておいたデータベースファイルをベースにして開発することで、システム開発の効率化を図っています。

3. カスタム関数の例

3-1. カスタム関数は関数を組み合わせて作成する

 カスタム関数は、計算式で作成すると前述しましたが、基本的にはFileMaker Proの計算式とあらかじめ用意されている関数を組み合わせることでカスタム関数を作成します。

 簡単な例として、セパレータで区切られた文字列から、任意のセパレータ位置から次のセパレータまでの文字列を抜き出す関数を解説します。

 例えば、

富士山|桜島|浅間山|普賢岳|三原山

 といった文字列があります。この文字列には山の名前がセパレータ「|」で区切られて入力されています。このテキストから、セパレータに囲まれた3番目の文字列を抜き出すためにはどのようにしたらよいでしょう?

 一つの手法として、次のような計算式で取り出すことが可能です。

Case(
  GetPosition=PatternCount ( Data ; GetDataSep ) + 1;
  Middle ( 
    Data ; 
    ( Position ( Data ; GetDataSep ; 1 ; GetPosition -1 ) + 1 ) ; 
    Length( Data ) 
  );
  Middle ( 
    Data ; 
    ( Position ( Data ; GetDataSep ; 1 ; GetPosition -1 ) + 1 ) ; 
    ( Position ( Data ; GetDataSep ; Position
      ( Data ; GetDataSep ; 1 ; GetPosition  ) ; 1) - 
      (Position ( Data ; GetDataSep ; 1 ; GetPosition -1 )+1))
  )
)

 この計算式を使用することによって、Dataフィールド内にある一連の文字列からGetPositionフィールドで示された位置の文字列を抜き出すことが可能です。 例えば、Dataフィールドの値が「富士山|桜島|浅間山|普賢岳|三原山」、GetPositionフィールドの値が「3」の場合、この計算式は「浅間山」を返します。

 このように計算式を記述すれば良いのですが、1つあるいは複数のフィールドにおいて同様の処理があるような場合、上記のような計算式をそのつど記述するのは大変ですし、仮に既存の計算フィールドからコピーしてきたとしても、計算式としては煩雑になってしまいます。

 そのような場合、頻繁に使用する計算式などはカスタム関数として定義してしまうことで、一つ一つの計算フィールドの記述が簡潔になります。

 関数には、多くの場合「引数」(ひきすう)という物があります。数学では「y = f(x)」などと関数式を表現しますが、「x」が関数「f」に対する引数で、関数「f」に引数「x」を与えることにより、関数「f」の数式に従って、結果「y」が求められます。

 これから定義する関数も、引数を受け取ることによって、関数はその引数に基づいて結果を返します。上記の計算式の場合、引数として必要になるのは、元の文字列の値、取り出す文字列の位置、セパレータの3つと考えるのが良いでしょう。

 引数を意識して、上記の計算式を分かりやすく整理すると次のようにな計算式にまとめることができます。

Let(
  [
    Max=PatternCount ( Data ; GetDataSep )+1;
    Begin = Position ( Data ; GetDataSep ; 1 ; GetPosition -1 )+1;
    Next = Position ( Data ; GetDataSep ; 1 ; GetPosition  );
    Cnt = Position ( Data ; GetDataSep ; Next ; 1) - Begin
  ];

  Case(
    GetPosition=Max;
    Middle ( Data ; Begin ; Length(Data) );
    Middle ( Data ; Begin ; Cnt )
  )
)

 この計算式の中で、元の文字列の値を指定するData、取り出す文字列の位置を指定するGetPosition、セパレータを指定するGetDataSepが引数として使用されます。関数の利用者は、これら3つの引数に値をセットして関数を実行すれば、計算結果として文字列を得ることができます。

3-2. カスタム関数を定義

 FileMaker Pro Advancedの[ファイル]メニューから[管理]-[カスタム関数...]を選択します。

 「カスタム関数の管理」ダイアログボックスで[新規]ボタンをクリックし、「カスタム関数を編集」ダイアログボックスを表示します。このダイアログボックスでカスタム関数を定義します。

 

 まず、カスタム関数に名前を付けます。今回は「GetArg」と付けておきます。

 次に引数として、DataGetDataSepGetPositionを定義します。引数は「関数の引数」欄に名前を入力し[+]ボタンをクリックすることで定義できます。引数が無事に定義されると、「関数の引数」欄の下に定義した引数の名称が表示されます。また、「関数の引数」欄の下に「GetArg ( Data ; GetDataSep ; GetPosition ) =」と表示されますが、これがこのカスタム関数の呼び出し方法となります。

 
 

 つぎに、先に整理した計算式を「GetArg ( Data ; GetDataSep ; GetPosition ) =」の下にある大きな枠に貼り付け(ペースト)、[OK]ボタンをクリックします。作成した計算式に問題がある場合は、[OK]ボタンをクリックした時点でアラートが表示されますので、メッセージに従って計算式を修正しましょう。

 

 さて、これでカスタム関数の「GetArg」の定義は完了です。

3-3. 作成したカスタム関数の動作確認

 実際にこのカスタム関数がFileMaker Proの計算フィールドで使用できるかを確認してみましょう。

 カスタム関数の実験を行うために計算フィールドを作成します。 計算フィールドの作成方法については連載の第3回などを参照してください。

 カスタム関数の実験を行うために計算フィールドを作成します。[ファイル]メニューから[管理]-[データベース...]を選択し、「データベースの管理」ダイアログボックスを表示させます。つぎに新しくフィールドを作成したいテーブルを選択した状態で「フィールド」タブをクリックします。

 まず、引数用のフィールドを作成します。「フィールド名」欄に「元データ」と入力し、タイプは[テキスト]を選択し、[作成]ボタンをクリックします。同じ要領で、セパレータ用のフィールド「セパレータ」を[テキスト]タイプで、抽出位置用のフィールド「取り出し位置」を[数字]タイプでそれぞれ作成します。

 

 引数用のフィールド作成ができたら、作成したカスタム関数GetArgを使用するための計算フィールドを作成します。

 フィールド名は「取り出し文字列」、タイプは[計算]で作成します。計算フィールドは[作成]ボタンがクリックされると、計算式の定義用に「計算式の指定」ダイアログボックスが表示されます。

 計算式の一部としてカスタム関数を使用するために、関数リストにカスタム関数を表示させます。関数リストの上にある「表示」ポップアップから[カスタム関数]を選択すると、作成したカスタム関数「GetArg ( Data ; GetDataSep ; GetPosition )」が表示されます。

 関数リストから「GetArg ( Data ; GetDataSep ; GetPosition )」をダブルクリックすることによって、カスタム関数を選択することができます。

 
 

 次に、カスタム関数のそれぞれの引数に、先に作成した置いたフィールドを指定します。

GetArg ( 元データ ; セパレータ ; 取り出し位置 )

 引数の指定ができたら、ダイアログボックスの最下部にある「計算結果」ポップアップから[テキスト]を選択して、[OK]ボタンで「計算式の指定」ダイアログボックスを閉じます。

 

 ブラウズモードで、実際に引数に値を指定して実験してみます。

フィールド
元データ 富士山|桜島|浅間山|普賢岳|三原山
セパレータ |
取り出し位置 4

 各引数に値を設定し、フィールドを確定すると、「元データ」フィールドの「4」番目の文字列を抽出する指定になりますので、「取り出し文字列」フィールドには「普賢岳」が表示されます。

 

 このように、複雑な計算式であってもカスタム関数として定義してしまえば、計算フィールドやスクリプトステップ内の計算式をシンプルにすることができます。また、何より複雑な計算式をカスタム関数化することで、計算式の再利用が容易に行えるようになります。

3-4. カスタム関数の再帰処理

 カスタム関数の作成方法と簡単な使用方法について解説しましたが、カスタム関数内の計算式で同じカスタム関数を使用する再帰処理について触れておきます。

カスタム関数:PyramidText( Letter )
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に新たな関数を登録することが可能なので、開発者が独自に作成したカスタム関数をデータベースファイルへライブラリ化しておくことで、システム開発の効率を高めることが可能です。

4. 外部関数プラグインを使う

4-1,外部関数プラグインとは

 カスタム関数と同様に、FileMaker Proへ機能を追加するものに「外部関数プラグイン」があります。

 外部関数プラグインは、その名が示すようにユーザー定義関数の一種です。外部関数プラグインは、FileMaker Proに拡張機能としてユーザーが任意にインストールすることができ、外部関数プラグインをインストールしたFileMaker Proで開いたすべてのデータベースファイルで使用することができます。

 FileMaker Proにインストールされた外部関数プラグインは、通常の関数と同じように計算フィールドやスクリプトステップ内の計算式で利用することができます。 この外部関数プラグインですが、FileMaker Proに初めから用意されている関数やカスタム関数と同様、「y = f(x)」の関数式の「y」を求めるための関数も多くありますが、「y」を求めるという用途よりも、FileMaker Proがもともと持っていない「機能」をFileMaker Proに追加するために、外部関数プラグインが用いられる場面が多くあります。

 外部関数プラグインは、C++のプログラミング技術をお持ちの方であれば開発をすることが可能です。しかし、FileMaker Proを利用する方の大半は、自分でプログラミングすることは難しいでしょう。そのような場合は、市販されているサードパーティー製の外部関数プラグインを購入することで、FileMaker Proに機能を追加することができ、例えばグラフ描画、メール送信、イベント発生、ポートI/O、画像や動画処理、ファイル操作を初めとする、多彩な機能をFileMaker Proに追加できます。

4-2. 外部関数プラグインを使う

 この中から、グラフ描画を行う外部関数プラグインを例に、簡単に説明しましょう。

4-2-1. インストール

 外部関数プラグインをインストールするには、まずプラグインファイルをFileMaker Proの「Extensions」フォルダにコピーすることから始めます。

 

 プラグインファイルのコピーが完了したらFileMaker Proを起動し、[編集]メニューの[環境設定]を選択して、「環境設定」ダイアログボックスの[プラグイン]タブを選択します。プラグインファイルがFileMaker Proに正常にインストールされている場合には、インストールした外部関数プラグインの名称が表示されます。名称の左側にあるチェックボックスがチェックされていれば、外部関数プラグインの利用準備は完了です。

 

 実際に外部関数プラグインで使用可能になった外部関数を確認するには、計算フィールドの「計算式の指定」ダイアログボックスの「表示」ポップアップから[外部関数]を選択します。関数リストに外部関数が表示されれば、いつでも外部関数を利用することができます。

 
 

4-2-2. 設定

 多くのサードパーティ製 外部関数プラグインでは、購入時にユーザーIDやレジストレーションキーがメーカーから発行されますので、それらを使用して外部関数プラグインをアクティベートします。今回、題材に使用するグラフ描画プラグイン「xmCHART」も、アクティベーション処理を必要とします。

 この外部関数プラグイン「xmCHART」では、「xmCHART」に用意されているアクティベーション用の外部関数を実行することで、アクティベーションを行います。

 FileMaker Proのスクリプトステップに「フィールド設定」という項目がありますが、このスクリプトステップの実行内容として次のような外部関数を実行します

xmCH_Activate( メーカーから付与されたユーザーID;
    アクティベーション用キーコード; 0 )

 このxmCH_Activateはアクティベーション専用のカスタム関数で、ユーザーIDとアクティベーション用のキーコードを引数にします。

 「フィールド設定」スクリプトステップを実行することで上記のカスタム関数が実行され、外部関数プラグインのアクティベーションが行われます。

 

4-2-3. 実行

 グラフを描くために必要なデータはFileMaker Proの計算フィールドやスクリプトで作成します。

 作成するデータの形態は描画するグラフの種類や複雑さによって違いますが、5つのデータを持つ一般的な棒グラフの場合、次のように値を「;」(セミコロン)で区切って指定します。

ChartData(
1005000 1200000 1700000 1820000 2100000 2300000 2550000
 2500000 2700000 2850000 2800000 3500000;
1500000 1200000 1550000 1680000 1750000 1950000 2050000
 2200000 3000000 3000000 1400000 1700000;
980000 800000 860000 910000 985000 1100000 1250000 1400000
 1480000 1320000 1400000 1600000;
)

 またグラフに表示する凡例のラベルなども、ダブルクォーテーションで囲んだ文字列をセミコロンで区切って指定します

LegendTexts(
"佐藤 ";
"田中 ";
"鈴木 ";
)

 これらの他にも、グラフの描画サイズ、グラフの色や、グリッドラインの表示方法なども同様に作成しておき、これらを外部関数のxmCH_DrawChart()関数の引数に指定して、「フィールド設定」スクリプトステップで関数を実行することにより、FileMaker Proのレイアウト上にグラフが描画されます。

 

5. まとめ

 FileMaker Proのカスタム関数と外部関数プラグインについて、とても駆け足で解説をしてきました。カスタム関数や外部関数プラグインを使用することで、FileMaker Proに初めは存在しない機能をFileMaker Proで実現することが可能になります。

 カスタム関数はFileMaker Proのユーザー自身が作成する場合が多いですが、外部関数プラグインは自分で開発できなくはないものの、既に市販されている外部関数プラグインがあるかも知れませんので、まずはサードパーティ製の物を探してみると良いでしょう。販売されている物がなかった場合には、開発方法も公開されているのでC++が扱えるプログラマの方に製作を依頼しても良いかも知れません。

 カスタム関数、外部関数プラグインは下記のようなサイトで検索することができます。まずは便利なカスタム関数や、FileMaker Proに加えたい外部関数プラグインを探してみてはいかがでしょうか。

参考になるサイト
サイト名 カスタム関数検索 外部関数プラグイン検索
BrianDunning.com (英語) -
FMPro.jp (日本語)
  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 給前 悟郎(キュウゼン ゴロウ)

    大学卒業後入社の企業で初めてFileMaker Proに出会い、主に社内システムの開発を担当。その後独立系ソフトウェア開発企業を経て、現在は(株)ジェネコムのスタッフとしてFileMakerによるシステム構築を手がけている。FileMaker 9 認定デベロッパ。

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5