FileMakerセッションモデル

普段IWPで開発するときによく使うパターンがあります。レコードが1件だけのユーティリティテーブルのグローバルフィールドにログインユーザのアカウント名を保持して、そこに貼ったリレーションから関連レコードのみをポータルで表示させるという方法です。
今回の記事で紹介しているモデルのリレーションシップグラフを最初に見た時、それのことかと思ったのですが、ビデオを見てみると、UUIDなどをセッションIDとして(アカウント名ではなく)接続ごとにレコードを生成する、本格的なセッション管理の手法でした。
以下は、私の拙訳です。


geist interactive

FileMakerセッションモデル
( FileMaker Session Model Video )

Todd Geist
2014/12/10

ビデオを見る

FileMaker 7よりも前の時代に、Colleen Hammersly (Data Waves)とWendy Kingが「FileMaker分離モデル」を考え出しました。 このモデルの一部として、中心となるファイル/テーブルからリレーションを介してのみデータを表示するという考え方が含まれていました。このパターンはその後「セッションモデル」と呼ばれるようになりました。今回のビデオではその考え方と長所・短所を説明します。

厳格な管理

すべてはリレーションを介して表示されるので、開発者が明示的に提供するレコード以外は、ユーザが閲覧したり編集することはできません。通常は開発者がステータスエリアを隠してロックすることで、すべてをスクリプトの管理下におきます。ユーザは、検索モードやリストビューを見ることはありません。他の方法でも不可能というわけではありませんが、FileMakerセッションモデルを使用すれば標準の状態で厳格な管理が可能になります。

元のテーブルを持たない

FileMakerのすべてのレイアウトには、ベースとなるテーブルオカレンス(TO)が必要です。「連絡先」を参照するためのレイアウトは「連絡先」TOの上に作成します。しかし、「ホーム」画面や「ダッシュボード」画面を作成する場合はどうすればいいでしょうか? どのTOをベースにするのでしょうか? FileMakerセッションモデルでは、この目的のために「セッション」と呼ばれる特別なユーティリティテーブルを提供します。セッションTOは、ベースとなるTOを持たないすべてのレイアウトのベースになります。多くの場合、このタイプの画面のためのデータは複数の異なるテーブルから集められているので、「ホーム」や「ダッシュボード」のような画面に適しています。

スライドパネルなどのインターフェース部品

「連絡先」から「請求書」に画面を切り替える時に、効果的な画面遷移のためにスライドパネルを使用したいとします。両方を同じレイアウトに表示できれば、これは簡単です。パネルを切り替えて、リレーションを生成あるいは有効化することによって表示したいレコードを選択するだけです。

FileMakerセッションモデルを使用しない選択

このモデルが常に有効というわけではありません。リストビューや検索モードは利用できません。むしろより大きな影響として、スクリプトトリガーを起動するイベントが通常よりも少なくなります。スクリプトは、(本来反応してほしい関連レコードではなく)セッションテーブルのレコードに基づいて起動されます。このような制限があるので、私は一部の画面でのみこの方法を使用しています。

技術的な解説

セッションレコードには1つの重要な役割があります。他のユーザ(WebDirectの場合は、他のブラウザタブ)によってレコードがロックされないようにすることです。それを、データベースへの接続ごとにユニークなレコードを持つことによって実現しています。ここで「接続」という言い方をしましたが、これをもし「アカウント名」とした場合、WebDirectではブラウザタブごとに新しいデータベース接続が発生して問題になるからです。つまり同じユーザがデータベースに対して複数の独立した接続を開くことができます。それらの接続には同じレコードを共有させないようにします。そうしないと相互にロックがかかってしまうことになるからです。下の図は、FileMakerセッションモデルのリレーションシップグラフです。

FileMakerのセッションモデル

FileMakerセッションモデルのリレーションシップグラフ。すべてのレコードを表示するためのリレーションシップの使い方に注目してください

また、ここで行っているように、テーブルの接続キーのフィールドを設定することによって、リレーションを介して表示されるレコードを選択するためにも使用されます。しかし、それは必須ではありません。機能をモジュール化したければ、セレクタモデルと組み合わせて使用することができます。開発時には、できるかぎり機能ごとにモジュール化することをお勧めします。その場合、リレーションシップグラフは以下のようになります。

FileMakerのセッションモデル

セレクタモデルと共にセッションモデルを使用する

この場合、セレクタモデルが表示するレコードの選択を処理し、セッションモデルがユーザからのデータベース接続ごとにレコードがロックされずに編集可能な状態で提供されることを保証します。

私はこのようにできる限りすべてがモジュール化された方法を好みます。それはModularFileMaker.orgの哲学に沿うものです。

サンプルファイル

ビデオで使用したファイルはここからダウンロードできます。

Leave a Reply