みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
よろしくお願いします。
iPadでFileMakerGO14を使用しているのですが、検索が遅く感じています。
Server上のスクリプト実行を使えば、改善できる可能性がありますでしょうか。
サーバ上の検索結果を反映させるために再度iPad上で検索する必要があるので、ケースバイケースでは。
スクリプトの結果の返し方次第で、関連レコードへ移動、というステップでクライアンと側で絞り込みが出来ます。これを使うと結構早くなりますよ。
Offline
検索条件がひとつだけでワイルドカードなどを利用していない場合は同等か逆に遅くなります。
検索条件が複数ある場合、
サーバー上のスクリプト実行の結果でユニークキーの一覧を受け取り(集計フィールドの一覧)
関連レコード移動を利用すれば再度検索する必要はないのでサーバー上の実行のほうが検索速度は向上します。
Last edited by Moz (2015-10-27 21:07:20)
Offline
皆様お返事ありがとうございます。
検索は
レイアウト切り替え
検索モードに切り替え
フィールド設定
でかなり多くのフィールドを指定して検索実行しています。
サーバー上のスクリプト実行の結果でユニークキーの一覧を受け取り(集計フィールドの一覧)
関連レコード移動を利用すれば再度検索する必要はないのでサーバー上の実行のほうが検索速度は向上します。
初めての分野でこれの方法がよくわかりませんでした。
申し訳ありませんが、もう少し詳しく教えていただけないでしょうか。
また、サーバー上のスクリプト実行で現在の検索スクリプトを実行しても、何も起こらない状態です。
互換性を調べてみてもサーバーで使えないスクリプトは使用していないはずなのですが、
何か注意する点はありますでしょうか。
また、サーバー上のスクリプト実行で現在の検索スクリプトを実行しても、何も起こらない状態です。
互換性を調べてみてもサーバーで使えないスクリプトは使用していないはずなのですが、
何か注意する点はありますでしょうか。
サーバー上のスクリプト実行が実行されるのは FileMaker Server 上の仮想クライアントです。
[サーバー上のスクリプト実行]を行ったクライアントでは何も起こりません。
検索の結果を受け取るためには Shin さんや私が書いているように
「スクリプトの結果」を利用する必要があります。
私の方法の場合、
テーブル毎の主キーフィールドの一覧フィールドを作っておき(集計フィールドの一覧タイプ)
[サーバー上のスクリプト実行]の「スクリプトの結果」に ↑ のフィールドの値を指定します。
検索結果のレコードの主キーの一覧(改行区切り)が返ってきますので
主キーとリレーションしたグローバル格納のフィールドに入れるなどして関連レコード移動をすれば
[サーバー上のスクリプト実行]の結果が取得できるといった具合です。
リレーションというモノがよく分からないようでしたら
先にリレーションについての理解などを深めておいたほうが良いでしょう。
関連レコード移動による検索の高速化は
FileMakerカンファレンスの録画セッションで触れられていたかと思います。参考にされてみては。
https://youtu.be/3w_9k6xH550
Offline
Moz様、ありがとうございます。
リレーションや集計フィールドの一覧についてはわかるのですが、
サーバー上で検索したレコードIDを「スクリプトの結果」で取得するのがどうしてもできません。
同じことをローカルではグローバルフィールドに改行区切りで入れることはできました。
下記のように、検索スクリプトの中に
現在のスクリプト終了[結果:ID一覧集計]を作り、サーバーで実行して、
次にグローバルにフィールド設定するようにしていますが、うまくいきません。
サーバーのスクリプト実行(最後に、現在のスクリプト終了[結果:ID一覧集計])
フィールド設定[グローバルフィールド;Get(スクリプトの結果)]
※FileMakerカンファレンスの録画セッションは大変参考になりました。ありがとうございました。
[サーバー上のスクリプト実行]で[終了するまで待つ]はオンになっていますか?
終了まで待つがオンになっていてもダメな場合
サポートされていないスクリプトステップが含まれていて正常に実行されていない可能性があります。
スクリプトを実行する最中にスクリプトトリガがアクティブになる場合
トリガで実行されるスクリプトでもサポートされないスクリプトステップがないか確認が必要です。
[サーバー上のスクリプト実行]でエラーが起きた場合、
FileMaker Server Admin Console にエラーログが残ります。
グローバルではないフィールドにスクリプトの結果と同じ値を設定することで
正しく最後まで実行されているか確認する方法もあります。
Offline
ありがとうございます。
なぜかフィールド設定で直接取得することはできないのですが、
一旦変数を介してからフィールド設定することで取得することができました。
ところが、なぜかどんな検索をしても同じ値ばかりが取得されてしまいます。
スクリプト実行[検索]で試すとうまく検索できるのですが、
サーバー上のスクリプト実行[検索]に入れ替えると、いつも同じ値でうまく検索できていないようです。
サーバーで使えないスクリプトを使っていないか互換性チェックをしているのですが、
検索が0の場合にカスタムダイヤログを出すという箇所以外は使っていないようです。
FileMaker Server Admin Console にエラーログもないようです。
何か他にチェックするべき点はありますでしょうか。
一旦変数を介してからフィールド設定することで取得することができました。
ここも解せませんが......
[サーバー上のスクリプト実行]ではファイルを開くところから開始されます。
意図通り動いていないスクリプトを
ファイルを開いた直後にスクリプトワークスペースから実行しても意図した結果は得られますか?
※検索したいテーブルのレイアウトに切り替えなどは一切行わずに......です。
サポートされていないステップが[サーバー上のスクリプト実行]では実行されないように回避処理を書くこと
正しいレイアウトに移動するための処理を追加するなどもできているか確認してみましょう。
Last edited by Moz (2015-11-06 17:45:32)
Offline
簡単な検索スクリプトを作ってテストしています。
サーバー上のスクリプト実行で指定する検索スクリプトに、
検索モードに切り替え
フィールド設定[商品::分類A; 10]
検索実行
などと、10と数値を直接入れるとうまくいきます。
ユーザーローカルには検索したい数値が
[グローバル分類A; 10]
とグローバルフィールドにあります。
ユーザーローカルのグローバルフィールドからサーバー上の仮想クライアントへは
どのように検索数値を渡せばよいでしょうか。
現在はグローバル変数
$$分類A
に格納して渡しているのですが、うまくいきません。
[サーバー上のスクリプト実行]に値を渡す場合、
グローバル格納ではないフィールドを利用するかスクリプト引数を利用します。
グローバル変数はファイルやクライアントをまたいで利用することはできません。
[サーバー上のスクリプト実行]は実行時に FileMaker Server の1クライアントとして扱われることに注意しましょう。
変数の使用
https://www.filemaker.com/help/14/fmp/j … .8.42.html
Get ( スクリプト引数 )
https://www.filemaker.com/help/14/fmp/j … 2.142.html
Offline
グローバル格納ではないフィールドを利用するには、どのレコードの値か判別する必要があるので、スクリプト引数を利用する方が楽でしょう。
Moz様、scripter様、ありがとうございます。
現在、下記のようなスクリプトでテストしています。
変数をGet ( スクリプト引数 )にどのように置き換えればよいのか
ヘルプ等を参考にトライしているのですがちょっと理解できません。
申し訳ありませんが、少し具体的に教えていただけないでしょうか。
■商品検索スクリプト
変数を設定[$A; 検索UI::グローバルA]
変数を設定[$B; 検索UI::グローバルB]
変数を設定[$C; 検索UI::グローバルC]
サーバー上のスクリプト実行[終了するまで待つ;「検索実行Server」]
変数を設定[$照合キー; 値:Get(スクリプトの結果)]
カスタムダイアログを表示[$照合キー]
■検索実行Server
レイアウト切り替え[「商品マスタ」]
エラー処理[オン]
検索モードに切り替え[]
フィールド設定[商品マスタ::A; $A]
フィールド設定[商品マスタ::B; $B]
フィールド設定[商品マスタ::C; $C]
検索実行[]
現在のスクリプト終了[結果:商品マスタ::ID一覧集計]
上記では、商品マスタの全レコードのIDが返ってきます。
検索実行Serverスクリプトに
フィールド設定[商品マスタ::A; 1]
フィールド設定[商品マスタ::B; 2]
フィールド設定[商品マスタ::C; 3]
などと具体的な数値を入れた時のみ正しく検索できます。
[サーバー上のスクリプト実行]の引数に「グローバルA」「グローバルB」「グローバルC」を設定すれば良いでしょう。
引数の受け取りは上の書き込みで書いた通り Get ( スクリプト引数 ) です。
引数には1つの値しか設定できませんので今回のように複数の値を渡す場合は各値を改行区切りで渡し、
GetValue 関数で1行ずつ取り出すなどの工夫が必要です。
GetValue 関数
https://www.filemaker.com/help/14/fmp/j … 2.243.html
なお、各フィールドの値に改行が含まれてしまう場合は単なる改行区切りではうまく動作しないので、
引数で Quote ( フィールド ) を改行区切りで渡し、Get ( スクリプト引数 ) の各行を Evaluate するなどの工夫が必要です。
まずは単純な引数(値が1つだけ)などでテストして試行錯誤すると良いでしょう。
Last edited by Moz (2015-12-22 16:07:35)
Offline
[サーバー上のスクリプト実行]の引数を設定するのをやっとわかりました!
検索結果の返りがものすごく速くてびっくりです!
ありがとうございました!!
すみません、スマートな書き方について教えてください。
下のように”& ¶ & ”で区切っているのですが、もっと良い書き方がないか模索しています。
空白を無視しないList関数のようなものはありますでしょうか。
検索UI::グローバルA & ¶ &
検索UI::グローバルB & ¶ &
検索UI::グローバルC & ¶ &
検索UI::グローバルD & ¶ &
検索UI::グローバルE & ¶ &
検索UI::グローバルF & ¶ &
検索UI::グローバルG & ¶ &
検索UI::グローバルH & ¶ &
検索UI::グローバルI & ¶ &
検索UI::グローバルJ
Substitute (
List ( Quote (グローバルA);Quote (グローバルB);Quote (グローバルC )・・・・・) ;
"\"" ; "" )
羅列の方がスマート?
Offline
何をもって smart といっているのか分かりませんが、
シンプルな計算式を指すなら改行でつなぐだけの計算式や旅人さんの計算式ではないですかね?
重要なのは必要な情報が漏れなく含まれ、設計されたとおりに動作することです。
計算式が短いこと = 優れたソリューションではないです。
値に改行が含まれた場合にも正しく動作するのか?
値が空欄だった場合にも正しく動作するのか?
などといったことのほうが大切ですよ。
スクリプトに複数の引数を渡すなら名前と値のペア(ディクショナリ関数)を利用する方法もあります。
Offline
旅人様、Moz様ありがとうございます。
FileMakerの奥深さと面白さに感動しています。
教えていただいたリンクを、時間のある時にじっくり試して勉強していきたいと思います。
皆さまありがとうございました。
Pages: 1
[ Generated in 0.008 seconds, 10 queries executed - Memory usage: 571.34 KiB (Peak: 592.24 KiB) ]