みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Windows10 Filemaker Pro17 Advancedを使用しています。
初心者です。いつもお世話になっております。
以前質問しkoeda様に頂いたサンプルを手本にして、OnObjectEnterのスクリプトトリガが設定してあるキーワード入力用のポータルをクリックすると、3つのグローバルフィールドにそのポータルのクリックしたフィールドの内容が順番に入力されるようになっており、その3つのキーワードで検索をするシステム作ろうとしていました。
ですが3キーワードでしか検索をするのではなく、限定数無くキーワードを入力したいと考え、この部分をキーワード入力用のポータルをクリックすることで入力先を1つのフィールドではなく、ポータルに変えてクリックした分だけキーワードが1レコードとして無限に追加されていくようにしたいと思っています。
ただそうすると今のポータルに設定してあるスクリプトトリガのスクリプトとは違いLoop構造のスクリプトを組まないといけずどうすればいいかわからず困っています。
現在のキーワード入力用のポータルクリックのスクリプトを載せておきます。
If [IsEmpty( 店舗::g_検索キー1 )]
フィールド設定[店舗::g_検索キー1;
商品_全商品表示::商品名]
Else If [IsEmpty( 店舗::g_検索キー2 )]
フィールド設定[店舗::g_検索キー2;
商品_全商品表示::商品名]
Else
フィールド設定[店舗::g_検索キー3;
商品_全商品表示::商品名]
・商品名(フィールド)がキーワード入力用ポータルに表示されているフィールド
・g_検索キー(フィールド)が現在のキーワード入力用ポータルをクリックして入力される先のグローバルフィールド
です
Last edited by morumo (2019-12-25 14:14:01)
Offline
クリック1回で1回の入力ですから、ループにはなりませんよ。
単にポータル行の最後に入力すればいいことです。
ポータルではなく繰り返しフィールドでもいいのでは。
また、
検索ではなく、ポータルフィルタを使った表示の絞込みでもいいのでは。
Offline
以前のご質問とはこのスレッドのことですね。
https://fm-aid.com/bbs2/viewtopic.php?id=9884
複数行だからといって、必ずしもポータルにする必要はないかと。
検索したい商品名をテキストフィールドにリストとして追加すれば、あとはリレーションでなんとかなります。
1)店舗テーブルに、検索キーワード群を格納するグローバルフィールド(テキスト)を一つ作る
2)商品テーブルのオカレンスを追加し(「商品2」とします)、1)のグローバルフィールドと商品名/店舗名でリレーション
3)OnObjectEnterのスクリプトを書き換え、クリック時に1)のグローバルフィールドに商品名を行追加/削除するようにする(商品名+改行)
4)c_照合の計算式を以下のように書き換える
Case (
IsEmpty ( キーワードリスト ) ; 1 ;
ValueCount ( キーワードリスト )=Count ( 商品 2::PK_商品ID ) ; 1 ;
0
)
でいけると思います。
検索アイテム数と、リレーション先の商品2のアイテム数が一致すれば、全部の商品を取り扱っているとみなせます。
Last edited by koeda (2019-12-26 08:01:19)
Offline
>>チポ様
そうでした、1回クリックするだけなのでLoopする必要は無いですよね。すみません。教えていただきありがとうございます。
繰り返しフィールドは上限値が決まっていると思うのですが、上限を無限にすることもできるのでしょうか?
>>koeda様
前回の質問では本当にありがとうございました。おかげでやりたいことのゴールがだいぶ見えてきました。
実はその検索する商品名(キーワード)を無限に入力したいだけじゃなく、店舗に検索する商品名が一致するものがどれだけあるのか、1つ1つの商品名を1点として点数を割り振り、100点満点中何点なのかをパーセンテージで計算しその値が大きい順の店舗から検索結果としてパーセンテージの値と一緒に表示したい(検索する商品名が1つでも一致すれば表示)のですが、そのような方法はあるのでしょうか?またあればどうすればいいのか教えていただきたいです。
Last edited by morumo (2019-12-25 20:46:04)
Offline
実はその検索する商品名(キーワード)を無限に入力したいだけじゃなく…
5点の商品を検索したとき、そのうち3点の商品を取り扱っていればその店は3/5=60点ということになるのでしょうか?
5点の全部がヒットした店のみを表示、という最初の仕様がひっくり返ることになりますね。
実は…と後から実現したいことを追加提示するのではなく、なるべく最初から提示していただきたいです。
データの持ち方など、場合によっては設計を見直す必要が発生し、それまで考えたことがムダになることも…
(追記)
前回のファイルを改造してみました。
・ポータルを1回クリックすると検索キーワードに追加、追加ずみのワードをクリックすると削除します。
・「スコア」が得点の計算フィールドです。計算式は必要な仕様に沿って修正してください。
・また、どの商品の取り扱いがあるかを表示するようにしてみました(「c_ヒットした商品」フィールド)。
https://www.dropbox.com/s/ldw79foqms1xc … fmp12?dl=0
Last edited by koeda (2019-12-26 09:25:20)
Offline
ボタンに仕込んだ1行スクリウト以外はスクリプトを使わない、シンプルな動きのサンプルです。
ポータルの中のチェックボックスの使い方がちょっと変わっています。
https://www.dropbox.com/s/1qir7rf6nagcx … 2.zip?dl=0
Last edited by Shin (2019-12-26 15:21:44)
Offline
>>koeda様
おっしゃる通りです、大変申し訳ありません。
そして、再度こちらのやりたことを再現している改善したサンプル提示と詳しい解説をしていただき、本当にありがとうございます。
提示していただいたサンプルをまた動かしてみてわからないことがあれば質問させていただきます。
>>Shin様
サンプルを提示していただきありがとうございます。是非参考にさせていただきます。
Offline
>>koeda様
早速仕組みわからない部分が出てきたので質問させいただきます。
今回の商品クリックのスクリプトに関してですがポータルを一度クリックするとキーワードリストに表示され再度クリックするとリストから消えるというのはわかるのですが、スクリプトを見た時、End Ifの後の一文にスクリプト実行の絞り込み実行の命令があれば、商品クリックのポータルをクリックするとフィールドがアクティブになって直ぐに非アクティブに切り替わるのに、この命令の一文が無いとポータルをクリックしてもフィールドがアクティブになったままで一度別の商品をクリックしないと再度前にクリックした商品をクリックできなくなるのですがどうしてなのでしょうか?
追記:適当に作った隠してるフィールドに移動することで解決しました。すみません。
Last edited by morumo (2019-12-28 05:52:24)
Offline
自力解決されたようですが、念のため…
スクリプト最終行を省いたときにご質問の現象が発生するのは、クリックしたポータル行からフォーカスが
外れるタイミングがなくなるため、その行を再度クリックしてもOnObjectEnterイベントが発生しないからです。
これを防ぐために、クリックするたびにポータル行からフォーカスを外すには
フィールドへ移動[ ]
のようにフィールドへ移動ステップをフィールド名を指定せずに実行します(ダミーのフィールドは作成不要です)。
フォーカスを特定のオブジェクトから外したいときにしばしば使われるテクニックですので覚えておかれると良いと思います。
Last edited by koeda (2019-12-28 07:42:32)
Offline
>>koeda様
勉強になりました、ありがとうございます。
Offline
Pages: 1
[ Generated in 0.011 seconds, 9 queries executed - Memory usage: 546.53 KiB (Peak: 567.44 KiB) ]