FileMaker Pro 13 ~ 「WebDirectの集計をより快適に実行する」
2014年10月15日 10:00 AM
ファイルメーカーのTips
FileMaker Pro 13から利用できる「WebDirect」の機能ですが、
レコード数が多い場合、集計にとても時間がかかりタイムアウトしてしまう事があります。
今回は、このタイムアウトを解決するTipsをご紹介いたします。
■今回のテストケース
・30万レコード
・前部総計パートと小計パートそれぞれに集計フィールドを4つ配置
上記の場合を試してみました。
実際にレイアウトを表示してみると、
文言にしたがってそのまま待つと…
画面の上部に以下のメッセージが表示されました。
[click here]をクリックしてみると、待機中となり白い画面になります。
ここでブラウザの画面更新を行うとログインウィンドウが表示されて、はじめにファイルを開いたときと同じ状態になりました。
では、どのようにしてこの画面をタイムアウトせずに表示することができるでしょうか?
解決方法の1つとして、
・Loopを使い1レコードずつ集計をしていくスクリプトを作成。
・そのスクリプトをサーバー上で実行する。
を行ってみます。
※サーバーのスペックによっては、上記の方法でも時間がかかったり、タイムアウトする場合があります。
今回は下記手順となります。
① 集計結果を保存する[集計結果]テーブルを作成
② 集計レイアウト[集計結果があるレイアウト]のテーブルを、[集計結果]のテーブルに変更し、各表示項目も合わせて変更する。
③ サーバー上で実行するスクリプトを作成
④ ①を呼び出すスクリプト作成
⑤ [集計結果があるレイアウト]へ遷移するスクリプトに、④のスクリプトを追加する。
※③のスクリプトを作成するときの注意点
サーバー上でスクリプトを実行する場合には、対象レコードの状態や
グローバルフィールドの値は、現在利用者が見ている状態とは別のものになります。
レコードを絞る必要がある場合には、検索条件等をスクリプト引数として
サーバー上で動かすスクリプトに渡して、そのスクリプト内で検索をしましょう。
以下が③④のスクリプトです。
■③ サーバー上で実行するスクリプト
集計項目があるレイアウトに切り替えて1レコードずつ、各集計項目を作成した変数に加算していきます。
※集計を行うレコードを絞りたい場合には、レイアウト切り替え後に検索が必要です。
スクリプト引数を利用して検索条件や検索値を渡してください。
Loopが完了し、集計が終わったあとは集計結果を保存/表示するレイアウトに切り替えます。
集計した各結果を、それぞれフィールドに保存します。
また、今回集計したレコードとわかるようにGet( UUID )を利用して作成IDを設定します。
スクリプトの最後に、呼び出し元である②のスクリプトに、
スクリプトの結果として保存した[集計結果::作成ID]をわたします。
■④ ③を呼び出すスクリプト
はじめにスクリプト①を「サーバー上のスクリプト実行」ステップを利用して
サーバー上で動かします。
サーバー上にて集計が終わったら、集計結果のレコードが出来上がり、
スクリプトの結果として作成IDが返ってきます。
あとは、集計結果を表示するレイアウトに切り替えて作成IDで検索をすると
先ほどサーバーで集計した結果のレコードのみが表示されます。
以上で終了です。
WebDirectでうまく集計を行うことができないということがあれば、この方法を試してみるのはいかがでしょうか。