FileMaker 一歩進んだシステム開発 - 怖くないよカスタムメニュー -

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/cf8a79ff-55d1-03c0-5e24-dbe3b258ba96.png)

#プロローグ
今回の記事は、ちょっと言葉で説明するのが難しいのでいきなり例を挙げます。
例えば以下のような、注文書管理用のアプリケーションを作ったとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/d7db9c22-993f-f54c-40a9-ffb977b04cd3.png)
「注文日」を指定して検索する、シンプルな一覧ですね。
検索用の注文日はグローバルフィールドで作成しています。検索ボタンをクリックした際のスクリプトは以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/b92fb464-dd78-6927-a6b7-059638019832.png)
検索モードに切り替えて、「注文日」に「検索用注文日」をセットして、検索実行　というシンプルなものです。
ここで例えば「担当者」も検索条件に入れたくなった場合、どうしたら良いでしょうか。
先ず思いつくのは、「担当者」用の検索フィールドを作る方法だと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/d8838650-c18c-ac20-593c-2e93cd6c20f7.png)
もちろんこの方法でも問題ないのですが、更に「顧客」でも検索したくなったら…。
とった感じで、検索フィールドがどんどん増えていくアプリケーションを何度か見たことがあります。
皆さんの中にも経験ある方がいるのではないでしょうか。

次に、FileMaker標準の検索機能を使う方法があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/ec16639a-8b16-214f-a78f-d817f1581479.png)
これなら画面上に表示されているフィールドであれば、自由な条件で検索ができます！
しか～～～し！この方法にも欠点があります。
勘の良い人なら気付いたと思います。「注文日」の指定が完っっ全に無視されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/fd590947-3d59-c6e2-e48a-344c114a1c1b.png)
「注文日」も指定したければ、検索モードで「注文日」も指定する必要があります。バカバカしいです。
これをなんとかしたいな～。そうだ。検索実行スクリプトをフックしよう！というのが今回の記事です。
フックというのは元の処理に別の処理を割り込ませる、もしくは別の処理に置き換えるといった意味です。
#どうしょっかな～
これを実現するにはカスタムメニューという機能を使います。
存在は知ってるけど、なんだか難しそうなので触りたくないという方も多いのではないでしょうか。
怖がることはありません。一度使ってみるときっと仲良くなれます。一緒に覚えていきましょう。
あっ。大前提としてFileMakerのAdvancedが必要です。

先ずカスタムメニューの概念を簡単に説明します。
大きくは　メニューセット／メニュー／メニュー項目　という３つの層に分かれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/adb67419-8783-a89e-2266-275ba9ebb55e.png)
メニューセットが親、メニューが子、メニュー項目が孫といったような関係性になります。
利用者や画面によって使用できるメニューセットを分ける、といった用途が多いと思います。
メニュー項目はFileMakerが標準で用意している処理の他に、自作のスクリプトを割り当てることもできます。
今回はこの機能を利用して、標準の検索処理をフックします。

では方法を見ていきましょう。

#やってみよう

#####①検索スクリプトを変更しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/a9138e3c-27cb-769c-61bf-826a0eeece49.png)
標準の検索実行処理をフックして、代わりに割り当てるために、検索スクリプトに手を加えておきます。
先ず検索モード(Get(ウインドウモード)=1)でなければ検索モードにしています。自作した検索ボタンに割り当てるスクリプトと、今回フックする検索スクリプトで共有して使いたいので、このような処理を入れています。
次に「注文日」が空なら、「検索用注文日」をセットしています。これは、「検索用注文日」より直接「注文日」に指定した条件を優先するための処理となっています。

#####②ファイル→管理→カスタムメニューを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/7e8f8d61-ecd9-415a-0348-0a7f39fc086a.png)
カスタムメニューの設定画面が起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/ce0d03dd-0a6c-c398-30b5-7cfeb91803ed.png)
作成されたカスタムメニューの一覧が表示されます。まだ１つも作成していませんが、元々標準で用意されているメニューが１つだけ表示されています。後でここにカスタムメニューセットを追加します。

#####③「カスタムメニュー」タブに切り替えて、「作成」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/0ea501d3-e917-3c1a-fdaf-65a7e0c9d4a1.png)

#####④「FileMakerの標準メニューから作成する」を選択し、下のリストから「ファイル」を選んでOKボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/7f4d8226-fe4b-7887-f633-35c3c864a883.png)
FileMaker標準のメニューを流用することができます。

#####⑤なにもせずにそのままOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/3b0aded0-c29c-d9df-582b-9c8ccee9e202.png)
何やらややこしそうな項目が並んでいますが、ひとまずここでは何もせずOKします。

#####⑥これを赤枠全てに繰り返し実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/197208a0-fd06-7f99-ff2c-92adb49f4473.png)
以下のようになっていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/fcff90ab-e745-c422-6b7b-0019e3927097.png)

#####⑦「検索条件 コピー」を選択して、編集ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/7d9f2325-4be9-3582-4fa1-8ebd4dff1735.png)
先ほど何もせずにOKした画面が起動します。

#####⑧メニュー項目から「検索実行」を選択し「処理」のチェックをONにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/e3004668-9b51-5d01-d160-8af2d08214c3.png)
チェックを入れたタイミングで、スクリプトステップを指定する画面が起動します。

#####⑨呼び出すスクリプトに、自前の検索スクリプトを指定してOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/37262eac-a40a-e9f4-d779-f60f61ce8a68.png)
右側のリストから実行するステップを選択できます。予め「スクリプト実行」が選択されていますので、実行するスクリプトに先ほど手を加えた検索用の自作スクリプトを指定します。

#####⑩「カスタムメニューセット」タブに切り替えて、「作成」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/e59caf7b-5dd6-b8e0-8e28-78976a737f51.png)

#####⑪メニューセット名に適当な名前を入力して、「追加」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/8739ab04-2914-b392-af78-aeb0c5b84ab7.png)
メニューを選択する画面が起動します。ここには先ほど複製したメニューの他、FileMakerが標準で用意しているメニューが幾つか表示されています。

#####⑫以下の通りになるように、メニューを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/94e99ad8-6e4c-5826-2766-ae7885049ad3.png)
並び順は自由ですが、今回はなるべくFileMakerの標準メニューセットに近い並びにしておきます。
左端の▲マークをドラッグで変更できます。

#####⑬レイアウト設定画面で、作成したメニューを指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/1d541777-d5d2-43a0-7f0f-f538744d6a3c.png)
これで検索実行した際の処理を、自作のスクリプトに変更することができます（フック）。

#####⑭完成
これで準備完了です。動作を確認しましょう。先ずは検索スクリプトに手を入れているので、検索ボタンの動作を確認しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/57a32631-66a1-8539-203c-e2976200154d.png)
うまく行かない場合、スクリプトの内容が正しいか確認してください。
では、検索モードに切り替えて「担当者」に条件を入れて検索しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/2defac3e-7bcd-571c-60c2-c5841dd49785.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251813/0972ad9b-ce16-b405-68f7-62064a88470e.png)
「検索用注文日」に指定した日付と、検索モードで「担当者」に指定した条件が適用されていればOKです。

#まとめ
今回は既存メニューの処理をフックして、自作のスクリプトを割り当てるという目的で、カスタムメニューを使用しました。カスタムメニューでできることの例を幾つか挙げておきます。

・一覧系の画面では新規レコードを作成できなくする
　→　レイアウトによってメニューセットを切り替える
・特定のユーザのみレコード削除を許可する。
　→　「インストールする条件」という機能を用いて条件を設ける
・メニューやメニュー項目の表示名称を変える

いかがでしたでしょうか。カスタムメニューが使えると、現在のアプリケーションのランクを１つ上げることができると思いますので、これを機にいろいろ試してみてください。失敗してもFileMaker標準のメニューに戻せば良いだけなので、恐れず挑戦してみてください！Plus Ultra！！

:cat:こちらもよろしければご覧ください。:cat:
　[FileMakerで登録／キャンセル制御したい](https://qiita.com/nakatomodesu/items/aef768741a4b4108790e)
　[FileMakerで分離モデルしてみたい](https://qiita.com/nakatomodesu/items/0bbb9f4846c1d104e6ad)
　[FileMakerでアプリ作っていくよ【作って学ぼう】](https://qiita.com/nakatomodesu/items/3e4e343fb785d4fb3841)
　[FileMakerでレスポンスが悪いときに確認すること](https://qiita.com/nakatomodesu/items/19d061804481cf109ac7)
　[FileMaker 一歩進んだシステム開発 -汎化-](https://qiita.com/nakatomodesu/items/4e6c63a02a2f8f454c5b)