FileMaker Advent Calendar 2015の21日目
「FMC2Goスケジューラーにおける絞込み検索機能」のつづき
昨日「絞込み」ボタンの中のボタンに「Session Filter」スクリプトが割り当てられていたのを確認できたので、「Session Filter」スクリプトを見ていくことにする
「Session Filter」スクリプトの呼び出しを確認する
ボタンを確認すると、「Session Filter」スクリプトが呼び出されるときに指定したい検索条件をスクリプト引数で渡しているようだ
「Session Filter」スクリプトを見ていく
昨日、ファシリテータの永井さんより「この機能を見ていくにあたっては結果から見ていくとわかりやすい」という情報をもらっていたことは書いたので、「Session Filter」スクリプトはお尻から見ていくことにする
最初(最後)のブロック
「Get ( 最終エラー )」でエラーが無かったか、「Get ( 対象レコード数 ) = 0」で対象レコードが見つかったかを確認
Ifブロックの中はエラーメッセージの定義忘れですかね?
レコードをソートして最初のレコードに移動しています
ここまではレコードの絞り込みのありきたりな処理です
その後「SchedulePopover」というオブジェクトに移動しています
この「SchedulePopover」というオブジェクトは何を指しているかというと、まあ名前の通り「絞込み」ボタンに割り当てられている「ポップオーバー」です
「ポップオーバー」は「ポップオーバーボタン」を押すことで表示されるのですが、スクリプトからは「オブジェクトへ移動」スクリプトステップを実行することで表示させることができます
オブジェクトへ移動
目的
現在のレイアウト上の指定オブジェクトに移動します。
構文
オブジェクトへ移動 [オブジェクト名:""<オブジェクト名>"]
そして「ポップオーバー」の中のオブジェクトに条件付き書式を設定しているので、それを反映させるために「オブジェクトの更新」スクリプトステップを実行を実行しています
オブジェクトの更新
目的
指定されたオブジェクトの内容、条件付き書式の設定、表示状態を更新します。
構文
オブジェクトの更新 [オブジェクト名:"<オブジェクト名>";繰り返し: <値または式>]
次のブロック
このブロックで対象レコードを確定しています
「Schedule」テーブルの「gScheduleFilterIDs」というグローバルフィールドに、ローカル変数「$IDs」の値を設定して「ScheduleByGlobal」テーブルの関連レコードに移動しています
ローカル変数「$IDs」には条件に該当するセッションのスケジュールのIDが入っているのでは?と推察できます
「Schedule」テーブルと「ScheduleByGlobal」テーブル
リレーションシップグラフで確認してみます
今回対象となりそうなのはこのリレーション
中身を見てみます
「Schedule」テーブルの「gScheduleFilterIDs」フィールドと「ScheduleByGlobal」テーブルの「__kp_Schedule_ID」フィールドの間でリレーションが張られていますね
「ScheduleByGlobal」テーブルは「Schedule」テーブルの別名のようです
ということは自己リレーションですね
明日は「関連レコードに移動」について書いてみます