みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になっております。
さて、フォーム形式のレイアウト(A)をブラウズモードで表示している状態から、
検索モード(Ctrl+F)でレコードを検索し、
対象レコードが一つ、もしくは対象レコードがなくて「キャンセル」で戻ったら、元のレイアウト(A)で表示して、
対象レコードが複数だったらリスト形式のレイアウト(B)で表示する
ということをしたいのですが、
どのスクリプトトリガから、どのようなスクリプトを実行したら良いでしょうか。
ご教授お願いします。
環境:Windows10,Filemaker Pro 15 Advanced
Offline
OnModeEnter トリガーで検知するといいでしょう。
内容は、ブラウズモードに入ったら、対象レコード数をカウントして分岐します。
Offline
レイアウト(A)のOnModeExit(◎検索モードのみ適用)に以下のスクリプトを設定。
・ エラー処理[オン]
・ 検索実行[]
・ If[Get(対象レコード数) > 1]
・ レイアウト切り替え[リスト・レイアウト(B)]
// ▼以下2行は省略も可能
・ Else
・ レイアウト切り替え[フォーム・レイアウト(A)]
// ▲
・ End If
Last edited by Hiro (2017-12-23 15:49:34)
Offline
Hiroさんの方法が現実的かと思います。
Offline
皆さん、アドバイスありがとうございます。
Hiroさんの方法を参考にさせて頂きました。
ただ、提示して頂いた方法のままだと、検索をキャンセルしたときにも検索実行がなされ、対象レコードが複数だったらレイアウトBが表示されてしまうので、検索条件が空の場合、最終エラーが400になることを利用して、
Ifの行を「If[Get(対象レコード数) > 1 and Get(最終エラー) = 0]」としてみました。
これはこれで、殆どの場合、期待した動作をするのですが、
検索がキャンセルされた場合、そもそもこのスクリプトの「検索実行」以下を実行しない方法とか有るでしょうか?
Offline
検索実行の後でエラーを取得し、分岐すればいいですよ。
Offline
検索実行の後でエラーを取得し、分岐すればいいですよ。
検索実行の前に、検索がキャンセルされたこと自体を取得することはできないのしょうか?
Offline
検索モードから、検索せずにブラウズに戻っても、
それを検知することはできないでしょう。
検索に入ることからスクリプトに限定したらいかがでしょう。
そうすればどうにでもなりますよね。
Offline
ほんとはチポさんの仰る通り全部スクリプトで動かせば済みますが、
標準の検索機能をそのまま使いたいのであれば、
OnModeEnterで検索モードに切り替えた時点でグローバル変数等にフラグを立て、
検索実行時にはフラグクリア、未実行でブラウズに戻ってきたらレイアウト分岐等の後処理を行わずにフラグクリア、
といった方法で制御はできます。OnModeExitでも考え方は同じ。
ただ、通常の動作をフックするスクリプトトリガにグローバル変数絡めると、
後々まで設計上の見通しは悪くなります。
可能であれば、処理が全て見渡せるスクリプトで対応した方が良いでしょう。
Offline
検索がキャンセルされたこと自体を簡単に取得する方法がないことを理解しました。
今回はHiroさんの方法を元に検索実行したあとのエラーで後の処理を分岐する方法で対処したいと思います。
皆さん、ありがとうございました。
Offline
Pages: 1
[ Generated in 0.011 seconds, 9 queries executed - Memory usage: 519.89 KiB (Peak: 524.43 KiB) ]