検索前の状態に戻れる「検索用のスクリプト」

今回は、随分前に銀座で毎月開催されていた
FileMaker Fun Night ! というイベントで紹介していただいた方法を利用した
検索用のスクリプトについてのお話です。

検索するスクリプトの作り方によってですが、
検索を実行し、該当レコードがないと、
対象レコード0件の状態になってしまうことがあります。
該当レコードがない場合、
元の状態に戻す仕組みは意外と少ないステップの追加でできるのです。


0件だと使いづらい(わかりづらい)ので、
該当がない場合は全件表示したり、メニュー画面に戻したり、
いろいろ自分なりに工夫していたことがありました。

ですが、スクリプトではなく、
FileMakerのデフォルトの検索機能を使って検索すると、
該当レコードがない場合は検索前の状態に戻るのです。

下図の状態のとき、
FileMakerのデフォルトの検索ボタンをクリックして条件を指定し、
条件を指定したら検索実行ボタンをクリック。
条件に該当するレコードがない場合、また下図の状態に戻っています。


対象レコードはもちろん、ソート状態や選ばれているレコードも元の状態になっています。
同じようにしたいと思ってもこれがなかなか難しそうで…。

いろんなステップを駆使すればなんとかできることはできたのですが、
毎回こんなにスクリプトを書くのはちょっとなぁ…と思っていました。

そんなときに教えてもらったのが、
今回のキモになる「関連レコードへの移動」のちょっと変わった使い方でした。

スクリプトを作る前に準備をします。

テーブルを用意します。
今回のサンプル画面では、2つのテーブルを用意しましたが、テーブルは1つあればできます。

リレーションシップグラフは以下のようにします。


レイアウトのコンテキスト(以下、元と記載)になるテーブルオカレンス「メイン」と、
同じテーブルのテーブルオカレンス「メイン|work」の2つを用意しておきます。

同じテーブルで2つのテーブルオカレンスを用意したら、
それぞれのテーブルオカレンスを元にしたレイアウトも用意しておきます。

下のレイアウトは「メイン|work」テーブルオカレンスを元に作った「メイン|処理用」レイアウトです。
今は全件対象になっており、未ソート状態です。


次のレイアウトは「メイン」テーブルオカレンスを元に作った「メイン」レイアウトです。
検索して該当レコードが4件、フリガナで昇順ソートしてあり、
選択されているレコードは2番目のレコードです。


↑この画面でスクリプトを実行します。

該当がない場合、元の状態に戻すスクリプトの例はこちら↓

#検索モードに切り替える前の対象レコードと対象レコードの状態を保存させる。
関連レコードへ移動 [ テーブル: 「メイン」; 使用するレイアウト: 「メイン|処理用」 (メイン|work) ] [ 関連レコードのみを表示; 対象レコードの照合 ]

#検索するレイアウトに戻る
レイアウト切り替え [ 「メイン」 (メイン) ]

Loop
#検索する
検索モードに切り替え [ ] [ 一時停止 ]
エラー処理 [ オン ]
検索実行 [ ]

#該当があったらLoopから抜けてこのスクリプトを終了する
Exit Loop If [ Get(最終エラー) = 0 ]

#該当がなかったら
カスタムダイアログを表示 [ タイトル: "検索該当なし"; メッセージ: "該当レコードがみつかりませんでした"; デフォルトボタン: 「再検索」, 確定: 「はい」; ボタン 2: 「キャンセル」, 確定: 「いいえ」 ]

If [ Get(最終メッセージ選択) = 2 ]
#キャンセルを選択
#保存した状態に戻してこのスクリプトを終了する。
レイアウト切り替え [ 「メイン|処理用」 (メイン|work) ]
関連レコードへ移動 [ テーブル: 「メイン|work」; 使用するレイアウト: 「メイン」 (メイン) ] [ 関連レコードのみを表示; 対象レコードの照合 ]
現在のスクリプト終了 [ ]
End If

End Loop

上記のスクリプトステップの中でポイントは「関連レコードへ移動」ステップです。
(2回使っています)


最初の「関連レコードへ移動」ステップで説明します。

「関連レコードの取得元」に指定するのは、
レコード表示状態を保存したいレイアウト、
「メイン」レイアウトの元になっている「メイン」テーブルオカレンスです。

「レコードの表示に使用するレイアウト」に指定するのは、
「メイン」テーブルオカレンスと同じテーブルで作ったテーブルオカレンス、
「メイン|work」を元に作った「メイン|処理用」レイアウトにします。

関連レコードのみのチェックをつけ、
「現在の対象レコード内のすべてのレコードを照合」にチェックをつけます。

このステップを実行すると、
「メイン」レイアウトで表示されているレコード状態が、
「メイン|処理用」レイアウトでも実現されるのです。


この仕組みを利用し、
検索前の状態を「メイン|処理用」レイアウトに保存しておき、
該当レコードがない場合に
「メイン|処理用」レイアウトの状態を「メイン」レイアウトに戻せるようにできるのです。

ちなみに、、、
該当がない場合に0件になってしまうスクリプトの例はこちら↓

Loop
#検索する
検索モードに切り替え [ ] [ 一時停止 ]
エラー処理 [ オン ]
検索実行 [ ]

#該当があったらLoopから抜けてこのスクリプトを終了する
Exit Loop If [ Get(最終エラー) = 0 ]

#該当がなかったら
カスタムダイアログを表示 [ タイトル: "検索該当なし"; メッセージ: "該当レコードがみつかりませんでした"; デフォルトボタン: 「再検索」, 確定: 「はい」; ボタン 2: 「キャンセル」, 確定: 「いいえ」 ]

If [ Get(最終メッセージ選択) = 2 ]
#キャンセルを選択
現在のスクリプト終了 [ ]
End If

End Loop

ということで、、、

今回は最近ちらほらとこのネタで喜んでくださる方がいらっしゃいましたので、
改めてブログに記載させていただくことにしました。

ブログの場所は変わりましたが、いつものくだりの始まりです<(_ _)>

今回もご紹介した内容についてのご質問などはお受けしておりません。
また、お試しになる場合は、ご自身の責任でお試しくださいますようお願いいたします。

それと、相変わらず打たれ弱いので、ツッコミなどはこっそりメールでお願いします。

ということで、新しいブログの場所での初のFileMakerネタでした。
どなたかのお役に立つことができればうれしいです(^^)


投稿者