10 返信 最新の回答 日時: Sep 27, 2016 11:17 PM ユーザー:しんばるしんた

    ポータル内を検索し、該当のみポータルに表示

    Nu-nrg

      タイトル

      ポータル内を検索し、該当のみポータルに表示

      フォーラムに投稿

      ポータル内を検索しますと、該当ありの場合はそのリレーション親テーブルをヒットするということか、ポータルは全部表示されてしまいます。
      ポータル内を検索し、該当のみポータルに表示することはできるのでしょうか。
      よろしくお願いいたします。

      環境:Win7,fM pro 12 ad

        • 1. Re: ポータル内を検索し、該当のみポータルに表示
          hiro_

           「ポータルフィルター」を計算式で動的に動かす、とか。

          http://www.filemaker.co.jp/11help/html/relational.11.21.html

          • 2. Re: ポータル内を検索し、該当のみポータルに表示
            ねこ吉

            こういった処理、自分も過去に何度か作ったことがあるのですが、

            基本的には「ポータル内のレコード順変更アイデア」の投稿の流れと

            同じ処理で実装してきました。

            つまり、

            1) ポータルの先にあるテーブルにレイアウトを切り替えて、検索実行して抽出状態にする。

            2) フィールド内容の全置換で、レコードにフラグを立てる。

            3) 元のレイアウトで、そのフラグを抽出する条件でポータルを再表示する。

            という具合。

            「フラグ」は、ON / OFF  のような2値ではなく、操作時刻のタイムスタンプとか、

            連番のような、使い捨ての数字を使います。(そうしないと、対象外のレコードのフラグを、

            OFF にするための処理時間も発生してしまうので。)

             

            このやりかたには難点もあって、

            ひとつは、複数ユーザが同時にデータベースを開くような場合に、

            フラグの排他制御ができないということ。

            もうひとつは、全置換対象のレコード数が多いと、フラグの書き込みに時間が

            かかりすぎるという点です。

            (自分は、FileMaker の開発の全般で後者の制限で苦しむことが多いです。)

            • 3. Re: ポータル内を検索し、該当のみポータルに表示
              Nu-nrg

              Hiroさん、ポータル内のレコードのフィルタリングを動的に動かすことはなんて出来るのでしょうか。

              • 4. Re: ポータル内を検索し、該当のみポータルに表示
                Nu-nrg

                ねこ吉さん、ありがとうございます。

                >3) 元のレイアウトで、そのフラグを抽出する条件でポータルを再表示する。

                これはどうすれば良いでしょうか。
                ポータルの順位の場合とちと違うような気がします(ソート順を固定してるだけなので)

                「フラグ」は、ON / OFF  のような2値ではなく、操作時刻のタイムスタンプとか、連番のような、使い捨ての数字を使います。

                これは素晴らしいアイデアですね、そこまで思いつきませんでした。

                • 5. Re: ポータル内を検索し、該当のみポータルに表示
                  hiro_

                  検索内容により2つの方法が考えられます。

                  ●定型的な検索で、検索キーワードだけ任意指定するもの。
                  この場合は、キーワードフィールドを引数にした検索条件式をポータルフィルターの計算式に設定します。
                  例えば、東京都内の得意先を表示する基本ポータルで、住所に「千代田」を含む得意先だけをフィルタリングして表示するなら、条件式は、(キーワードフィールドは「千代田」と入力)
                   Case(
                    IsEmpty(キーワードフィールド); 1;
                    PatternCount(ポータルテーブル::住所; キーワードフィールド)
                   )

                  ●非定型のフリー検索で、検索条件式自体を任意指定するもの。
                  目的の条件式を式定義フィールドに記述し、それをポータルフィルターのEvaluate式で式実行します。
                  Evaluate式は、
                   Case(
                    IsEmpty(式定義フィールド); 1;
                    Evaluate(式定義フィールド)
                   )
                  式定義フィールドの定義式は、
                  例えば、東京都内の得意先を表示する基本ポータルで、住所に「東京都千代田」が前方一致で照合する得意先だけをフィルタリングして表示するなら、
                   Left(ポータルテーブル::住所; Length("東京都千代田")) = "東京都千代田"

                  1 人中 1 人が役に立つと言っています
                  • 6. Re: ポータル内を検索し、該当のみポータルに表示
                    ねこ吉

                    > 3) 元のレイアウトで、そのフラグを抽出する条件でポータルを再表示する。
                    >
                    > これはどうすれば良いでしょうか。
                    > ポータルの順位の場合とちと違うような気がします(ソート順を固定してるだけなので)

                    ポータルを表示する条件が、フラグの値の一致なのですから、リレーション元のキーになっている

                    フィールドの値も変更することになります。

                    リレーション元のキーになるフィールドは、"グローバル格納"にしておいて、そこを書き換えてから、

                    レコードを確定します。レコードが確定されると、ポータル内が再表示されます。

                     

                    ポータルフィルタは非定型な検索が作りにくいと思っていたのですが、

                    Hiroさんの、"Evalute" のアイデアのほうがスマートですね。


                    • 7. Re: ポータル内を検索し、該当のみポータルに表示
                      Nu-nrg

                      ねこ吉さん、ありがとうございます。
                      なろふど、これ専用のリレーションキーを書き換えたり戻したりという作業になるのですね。
                      グローバルフィールドでも良いのでしょうけど、やはり変数で対応したいところですね。 
                      (グローバル変数でない変数ならばユーザーごとに設定、破棄できそうでしょうから)

                      Hiroさんのアイデアの方を追求してみたいと思います。 

                      • 8. Re: ポータル内を検索し、該当のみポータルに表示
                        Nu-nrg

                        Hiroさん、具体的にありがとうございます。
                        定型ではなくフリーワード検索でいきたいと思います。

                        クイック検索やメニューの検索モードを利用するのではなく、ポータル内検索専用の検索ワードを入力するカスタムダイアログを利用してみたいと思います。
                        ということは、スクリプト利用、変数利用し(あ、スクリプトが終わると自動で破棄される変数はだめか、グローバル変数を利用かな)、ポータルに表示されているフィールド分のマッチングをEvaluate式を使って条件分岐し、ポータルフィルタ判定のbooleanを吐くという感じでしょうか。
                        ちょっと一考してみます。

                        みなさま、アドバイスがありましたら引き続きお願いいたします。 

                        • 9. Re: ポータル内を検索し、該当のみポータルに表示
                          Nu-nrg

                          カスタムダイアログの入力フィールドには、なにかしらの実フィールドでしか値を渡せませんでした、変数に値を直接渡せない。
                          やっぱりグローバルフィールドを使うしかないですね。 
                          カスタムダイアログ自体必要ないですね。
                          フィールドに関係なく入力フォームが作れると、ファイルメーカーはぐっと便利になると思うんですが^^; 

                          • 10. Re: ポータル内を検索し、該当のみポータルに表示
                            しんばるしんた

                            ありがとうございます。この手法を活用させていただいてます。

                            しかし、一つオカルトなことが起きました。

                             

                            住所録をポータルにリスト表示しており、それを検索用のフィールドに検索文字を打ち込むと、フィルターがかかって…という、そのままの仕組みなのですが、長音“ー”は認識されません。というか、それがハイフン(半角マイナス)に置き換わってます。もちろん元データは長音を使っています。しかし、なぜかポータルに表示されてるときは長音ではなくて半角マイナスになっているのです。

                            (例)ファイルメーカー => ファイルメ-カ-

                             

                            長音をマイナスにして検索窓に打ち込むとヒットします。

                            ちょっとオカルトな現象ですが、一体これはどういうことなのでしょうか?