オリジナル検索窓ファイルメーカーで検索窓の設置をよく行います。自作の検索窓レシピ、FileMaker関連の単発記事です。あれば便利なテーブルオリジナル検索窓ファイルメーカー書類に自作検索窓を用意することが一般的なのかどうか判りませんが私はよく使います。検索するだけならコマンドFでいいし、ツールバーにもクイック検索窓があります。ツールバーのクイック検索は検索対象が広範囲すぎて書類によってはとても遅いし、ツールバーそのものを非表示にすることも多いのです。クイック検索についてぜんぜん知りませんでした。検索対象を指定できるしスクリプトステップにもあるし、こいつは割と使えるやつです今日のお料理はオリジナル検索窓です。検索窓フィールド格納をグローバルに設定した検索窓として使うテキストフィールドをひとつこしらえておきます。グローバル格納はリレーションなしでも配置できるので、大事なデータベースのテーブル内でなくてもどこにあってもいいです。検索窓フィールドに文字を入力して確定したら検索させます。フィールドトリガーを仕込んで動かします。検索ボタンとクリアボタン検索ボタンと入力をクリアするボタンをサービス的に用意します。検索は入力と確定で行いますから検索ボタンはいらないのですが、ここが検索フィールドであることを示すため、あと検索するとき丁寧に検索ボタンを押す人が結構な割合でおられますのでそのために親切として設置します。検索ボタンの動作は、検索窓トリガーで使用する検索用スクリプトと同じものを指定してあげればいいと思います。クリアボタンも特にいらないけど親切設計として用意します。検索窓フィールドを空にするだけの機能です(例ではメッセージ欄もついでに空にしています)スクリプト検索窓フィールドにトリガーで仕込む検索させるスクリプトを1個作ります。それ以外に少しオマケ的なスクリプトが一つあります。作り方を見ていきましょう。検索窓フィールドにスクリプトトリガーを設定します。OnObjectSaveです。OnObjectSave入力が確定しセーブされると発動するトリガーです。反応早すぎてだめなんでObjectSaveを使います。検索窓実行スクリプト仕込むスクリプトは実にシンプル。検索窓の言葉で検索するだけのスクリプトを作ります。検索モードに切り替え検索対象フィールドに変数を指定(必要フィールドごとに複数)検索実行これだけです。変数に仕込む意味あんのか。検索モードでフィールド指定。この例ではtitleフィールド検索フィールドに入力された内容($item)を、検索モードにした上で検索対象にしたいフィールドに設定してやるだけです。簡単にスクリプトステップ「クイック検索の実行」を指定してもいいと思います。複数のフィールドを指定したり、細かな検索条件があれば追加したりです。画像の例は、どのテーブルでも「title」フィールドを指定できる書き方です。それとは別に上記スクリプトには追加したほうがいいスクリプトステップがあります。このスクリプトに追加する二つのスクリプトステップひとつは「検索窓フィールドが空のときは何もせずスクリプト終了」です。事故的に検索フィールドにカーソルが行ってリターンしてしまうとか、意味なく検索ボタンをクリックしてしまうとか、あり得なくもありません。検索窓が空なのに検索されてもウザいだけです。検索窓が空なら終了、何もしませんこれを一番最初に書いておくと空欄を検索してしまう事故を防げます。ひとつは「検索実行のエラー処理」で結果がなかったときの挙動を作っておくことです。検索結果がない場合のデフォルトの挙動ってウザいですよね。あれを出さないようにします。最後の「検索実行」の前にエラー処理オンを挟んで、検索実行のあとに何をするか書きます。Get(最終エラー)の番号ですが、問題がないときは0で、エラーに応じて番号がいろいろあります。検索結果がないときは404ですか?よく知らないのでとにかく0でなければエラーってことで雑な処理をしています。以上で終わりですが、少し欲が出てきますので味付けとしてもうひとつスクリプトを作って仕込みましょう。検索語を入力してエンターキーを押すと確定して検索開始しますが、リターンキーだと改行になります。検索窓で改行を入れたいことはほぼないでしょう。入力してリターンキーをぽんと押すと検索してもらいたい。そこでOnObjectKeystrokeです。OnObjectKeystrokeアクティブなフィールドにいるあいだキーストロークを操れるトリガーです。このフィールドにいるときはリターンキーを「確定」にいたしましょう。リターン(13番)が入力されたら確定そういえばファイルメーカーのスクリプトはコピーしてもテキストにペーストできません。面倒なのでキャプチャ画像でやってますが。ファイルメーカーを使っていて、フィールド内での改行に少々イラッとくることも多いのです。このシンプルなスクリプトは検索窓に限らず、改行が不要なフィールドにじゃんじゃん使っています。キーストロークは他にも使えそうなスクリプトですが、キーの番号を知ることがハードル高い部分ですよね。よりますと、Unicodeのコードポイントだそうです。面倒くさそうなのでリファレンスから引用して自分のためにもメモしておきます。このあたりが判っていれば割と十分じゃないでしょうか。検索窓の下に「〜の検索結果」と、ムービーに映っているのでそれについて一言だけ。https://www.digitalboo.net/blog/wp-content/uploads/2020/01/FM検索窓.m4v検索窓の下に検索結果を表示するメッセージ欄があります。これもグローバル格納の入れ物フィールドです。検索するスクリプトの最後には、メッセージ欄フィールドに検索語を入力するような親切設計をしております。隣に見える「タイトルで並び替え」も同じくグローバル格納フィールドを用いたスクリプトのポップアップメニュー。小ネタ:快適操作オマケあれば便利なフィールド検索窓の話は終わりですが、検索されることを前提にしたフィールドのネタをデザートとして一席。検索対象のインデックス用隠しフィールド個人的に検索対象用の隠しフィールドを作っておくことをたまにやっています。検索窓フィールドを作ると、特定フィールドだけじゃなくいろんなフィールドを対象とする言葉を検索したいですよね。いうとき、検索スクリプトに必要な検索対象をだらだら書き綴ってもいいのですが、検索したいフィールドを一つの被検索用フィールドにまとめてもいいと思うんです。フィールドをまたがる検索用インデックスフィールドの作成です。作成するインデックスフィールドは計算フィールドです。このフィールドをレイアウト上に表示させる必要はありません。カスタムとしてローマ字にしたものを加えたりもしますし、テキスト内容を細工して分割したりもします。なんとなればポータルから転記したりもします。ここを検索対象にするだけで必要な検索をカバーできることを目的に作り込んだりします。いうフィールドを作っておくと検索窓スクリプトに書く検索対象がこれ一個で済みますから汎用スクリプトとして使い回しも楽々。高速で検索出来ますし。必須じゃないしあくまでオマケ的な話ですけど。FileMakerのクイック検索でも検索対象とするフィールドを手動で管理できるみたいです。インスペクタのデータタブに「クイック検索に含める」のチェックあります検索対象フィールドがひとつで済むことや、インデックスに相応しいカスタムをガッチリ行うことに関してはインデックスフィールドの自作が有効かなと思います。あれば便利なレイアウト検索絡みのネタ、あれば便利なレイアウトです。それは検索用レイアウトです。複雑なレイアウトを作ってると、レイアウトトリガーやレコードトリガーがセットされると思います。レイアウトやレコードがロードされる度に発動するスクリプトが仕込んであることでしょう。検索実行したときにもトリガーが発動します。検索時にはこれいらない場合が多いと思います。必要でも、検索実行のときにエラー処理を挟んでいると上手くいかないことがあります。検索実行でエラーが出てるのに、「Get(最終エラー)」が動くより先にレコードトリガーが発動してしまい、エラーがいつの間にかどっかいっちゃうてことが起こり得ます。そんなわけで検索専用レイアウトを用意します。このレイアウトは無骨にフィールドがあるだけで装飾やボタン類やレイアウトトリガーやレコードトリガーは一切含めません。検索するスクリプトを書くとき、検索語を変数に入れたら速攻で検索用レイアウトに移動してそっちで検索、実行後は速やかに元のレイアウトに戻します。これで検索実行とエラー判断の間を邪魔するスクリプトを発動させずに済みます。基本的なTipsかなと思いますが私はこういうことに何十年も気づかずにいましたので他にもそういう人いるかもしれないと思って書いときました。あれば便利なテーブル検索窓フィールドはただの入れ物フィールドでした。使うポップアップメニューもただの入れ物フィールドを使用します。ソートメニューなんかもただの入れ物フィールドを使います。あと親切な「メッセージ欄」みたいなグローバルなフィールドも使います。変更できないように設定したフィールド内容を「コピー」したいときにコピペ用グローバルフィールドを使います。現在のウインドウ位置やサイズやレイアウト名を仮に保存しておくためのシステマチックな入れ物フィールドを使ったりもします。羅列してもキリがないですが、そんな感じで、グローバル設定の入れ物フィールドを多用します。いうのを大事なデータベースの本体テーブル内に作ってしまうのは良くないです。ごちゃごちゃになりますし。グローバルなフィールドはリレーション設定しなくてもどこにでも配置できますから、グローバルな入れ物フィールドばかり集めた専用のテーブルを作って、入れ物はそっちから配置します。いうテーブルまたはファイルでもいいですね、作っておくと何かと便利に使えます。使い回すことも多いです。いうことでしつこいオマケもありましたがファイルメーカーの自作検索窓でした。コメントデータの処理方法の詳細はこちらをご覧ください。[Amazon]執筆者のCDです。