初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-12-23 12:29:13

KN0319
Member

検索結果のレコード件数によってレイアウトを変えたい

お世話になっております。

さて、フォーム形式のレイアウト(A)をブラウズモードで表示している状態から、
検索モード(Ctrl+F)でレコードを検索し、
対象レコードが一つ、もしくは対象レコードがなくて「キャンセル」で戻ったら、元のレイアウト(A)で表示して、
対象レコードが複数だったらリスト形式のレイアウト(B)で表示する
ということをしたいのですが、
どのスクリプトトリガから、どのようなスクリプトを実行したら良いでしょうか。
ご教授お願いします。

環境:Windows10,Filemaker Pro 15 Advanced

Offline

#2 2017-12-23 15:21:44

Shin
Member

Re: 検索結果のレコード件数によってレイアウトを変えたい

OnModeEnter トリガーで検知するといいでしょう。
内容は、ブラウズモードに入ったら、対象レコード数をカウントして分岐します。

Offline

#3 2017-12-23 15:39:44

Hiro
Member

Re: 検索結果のレコード件数によってレイアウトを変えたい

レイアウト(A)のOnModeExit(◎検索モードのみ適用)に以下のスクリプトを設定。

・ エラー処理[オン]
・ 検索実行[]
・ If[Get(対象レコード数) > 1]
・    レイアウト切り替え[リスト・レイアウト(B)]
// ▼以下2行は省略も可能
・ Else
・    レイアウト切り替え[フォーム・レイアウト(A)]
// ▲

・ End If

Last edited by Hiro (2017-12-23 15:49:34)

Offline

#4 2017-12-24 15:34:35

Re: 検索結果のレコード件数によってレイアウトを変えたい

Hiroさんの方法が現実的かと思います。

Offline

#5 2017-12-26 18:01:30

KN0319
Member

Re: 検索結果のレコード件数によってレイアウトを変えたい

皆さん、アドバイスありがとうございます。

Hiroさんの方法を参考にさせて頂きました。
ただ、提示して頂いた方法のままだと、検索をキャンセルしたときにも検索実行がなされ、対象レコードが複数だったらレイアウトBが表示されてしまうので、検索条件が空の場合、最終エラーが400になることを利用して、
Ifの行を「If[Get(対象レコード数) > 1 and Get(最終エラー) = 0]」としてみました。
これはこれで、殆どの場合、期待した動作をするのですが、
検索がキャンセルされた場合、そもそもこのスクリプトの「検索実行」以下を実行しない方法とか有るでしょうか?

Offline

#6 2017-12-27 08:58:35

Shin
Member

Re: 検索結果のレコード件数によってレイアウトを変えたい

検索実行の後でエラーを取得し、分岐すればいいですよ。

Offline

#7 2017-12-27 16:17:52

KN0319
Member

Re: 検索結果のレコード件数によってレイアウトを変えたい

Shin wrote:

検索実行の後でエラーを取得し、分岐すればいいですよ。

検索実行の前に、検索がキャンセルされたこと自体を取得することはできないのしょうか?

Offline

#8 2017-12-27 16:47:21

チポ
Member

Re: 検索結果のレコード件数によってレイアウトを変えたい

検索モードから、検索せずにブラウズに戻っても、
それを検知することはできないでしょう。

検索に入ることからスクリプトに限定したらいかがでしょう。
そうすればどうにでもなりますよね。

Offline

#9 2017-12-27 16:59:13

honda
Member

Re: 検索結果のレコード件数によってレイアウトを変えたい

ほんとはチポさんの仰る通り全部スクリプトで動かせば済みますが、
標準の検索機能をそのまま使いたいのであれば、
OnModeEnterで検索モードに切り替えた時点でグローバル変数等にフラグを立て、
検索実行時にはフラグクリア、未実行でブラウズに戻ってきたらレイアウト分岐等の後処理を行わずにフラグクリア、
といった方法で制御はできます。OnModeExitでも考え方は同じ。

ただ、通常の動作をフックするスクリプトトリガにグローバル変数絡めると、
後々まで設計上の見通しは悪くなります。
可能であれば、処理が全て見渡せるスクリプトで対応した方が良いでしょう。

Offline

#10 2017-12-28 12:53:01

KN0319
Member

Re: 検索結果のレコード件数によってレイアウトを変えたい

検索がキャンセルされたこと自体を簡単に取得する方法がないことを理解しました。
今回はHiroさんの方法を元に検索実行したあとのエラーで後の処理を分岐する方法で対処したいと思います。
皆さん、ありがとうございました。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.011 seconds, 9 queries executed - Memory usage: 519.89 KiB (Peak: 524.43 KiB) ]