自分のイベントだけを表示する

ユーザが、自分自身のイベントだけを見るようにするにはどうしますか?

概要

ユーザに対して表示されるイベントを簡単に制限できます。制限するには、2通りの方法があります。フィルタを使う方法と、アクセス権を使う方法です。

フィルタを使う方法はシンプルです。イベントの「オーナー」のフィルタを新たに作成し、カレンダーをあらかじめフィルタリングすれば、そのオーナーのイベントだけが表示されます。ただしこれだけだと、ユーザはフィルタをリセットしてほかのイベントを見ることができます。このようにしておくほうが便利な場合もあります。

イベントを検索して表示する際に、カレンダーが実行するSQLのリクエストを横取りしてカレンダーにフィルタをハードコードすることもできます。これは、ユーザが変更できないフィルタと考えられます。

どちらのフィルタリングの方法も、カレンダーのインターフェイスを利用して表示内容を制限しています。ユーザはイベントのリストを操作し、イベントを検索すると、他のユーザのイベントが検索される可能性があります。これでは都合が悪い場合には、FileMakerのアクセス権の機能を使って、ユーザに対して表示される内容を制限します。この方法はFileMakerに付属の機能を利用するものであり、このカレンダーに固有の方法ではありません。

フィルタを使う

あらかじめフィルタをかける

カレンダーに表示される内容を制限する最も簡単な方法は、フィルタを使うことです。おそらく、ユーザがカレンダーを開く際にあらかじめフィルタをかけるようにしておくことが多いでしょう。カレンダーにあらかじめフィルタをかける方法については「フィルタ」を参照してください。

見えないフィルタをハードコードする

もうひとつの方法は、レコードを探す際に実行されるSQLのリクエストを横取りするものです。これは、見えないフィルタと考えられます。この方法を使うには、「Build Filter ( SourceNo )」スクリプトの編集ウインドウを開き、スクリプトの最初の方にある「Hard code a filter here"」のコメントを見つけます。その次にある「変数を設定」スクリプトステップを使って、常に実行されるSQLのWHERE句を挿入できます。詳しくはこの「変数を設定」の計算式のコメントを参照してください。

覚えておきたいのは、おそらく一部のユーザに対してのみこのスクリプトを実行するようにしたいということです。そこで、WHERE句に「userness」を含めるか、Case文を使ってアカウント名ごとに異なるWHERE句を作成します。

アクセス権を使う

概要

簡単に設定できます。FileMakerのアクセス権の機能を使って、ログインしているユーザに応じて、どのレコードが表示されるか、編集できるかなどのルールを作成します。表示できるレイアウトの制限や、特定のフィールドに対してアクセスできるかどうかの制限までできます。

これまでにFileMakerのアクセス権を扱ったことがなければ、FileMakerに付属のヘルプで概要を読み、「目次」>「データベースの保護」>「アクセス権セットの作成と管理」>「レコードアクセス権の編集」を確認してください。

ユーザに対して表示されるレコードの制限については、ヘルプの「レコードアクセス権の編集」ページを参照してください。箇条書き4.の下にある「制限」のオプションについての説明が参考になるでしょう。

ヒントとテクニック

ここでテクニックを要する部分は1つだけです。それは、ユーザのログインの状況を把握して、それをカレンダーのイベントのテーブルのフィールドと結びつけることです。これに使用できるのは、「Get ( アカウント名 )」と「Get ( アカウントアクセス権セット名 )」です。アクセス権セットの名前はおそらく「administrator」や「sales rep」といった一般的なもので、FileMakerのアクセス権を使ってどのユーザから見えるか、編集可能かを制限している可能性があります。たとえば、アクセス権を作成して、営業担当者はカレンダーの管理タブにはアクセスできないようにするなどの例があります。

そこでおそらく、アクセス権の計算式で「Get ( アカウント名 )」を使って、ログインしているユーザと、予定に結びつけられているユーザを比較することになるでしょう。これには2つのやり方があります。

方法1

ユーザのアカウント名を、データベース中の既存のフィールドに一致させることができます。アカウント名はすべてユーザの実際の姓名にします。たとえば「Bill Smith」のようなアカウント名になります。そのようにしていると、ログインしているユーザの予定だけを表示するためのアカウント名の計算式は、以下のようになります。

Not isEmpty ( FilterValues ( List ( SampleEvents::UserNameFirstLastCalc ) ; Get ( AccountName ) ) )

この計算式は、「Source No 1」レイアウトに使用しているのと同じテーブルオカレンスのコンテクストから評価されるように設定していることに注意してください。このため、この計算式に関して注意すべき点がいくつかあります。まず、この計算式は「1」または「0」の値を返すだけであるということです。アカウント名が、予定と結びつけられているユーザの名前のうちの1つである場合は、「1」を返します。そうでない場合は「0」を返します。アクセス権の計算式はこのように作成する必要があります。ユーザがレコードを見たり編集したりできる場合には「1」(すなわち「真」)を返すということです。また、「=」の記号を使用しないことにも注意してください。その理由は、複数の人に関係する予定もあり得るため、予定を所有しているユーザは、特定の誰か1人のユーザと「イコール」ではないからです。「=」の代わりに、「FilterValues」を使って、アカウント名が予定に関係するユーザの「メンバーである」かどうかを判断しています。

方法2

2つめの方法は、ユーザのテーブルにフィールドを作って、アカウント名と一致させるということです。基本的にはアカウント名をFileMakerに記録します。もちろん、ユーザのパスワードをFileMakerにセキュアでない形では記録してはいけません。

ユーザ名の索引がイベントのテーブルにない場合、この計算式はソリューションの処理速度をきわめて低下させることに注意してください。FileMakerは表示のためにイベントのひとつひとつについて関連する情報を探すからです。

もちろん、一部のユーザは全員の予定が見られるようにしたいということもあるでしょう。この場合も、上述の計算式を大幅に変える必要はありません。一部の「パワーユーザ」に対して、予定の表示をまったく制限しないアクセス権セットを割り当てるだけです。

この2つめの方法は、SeedCode Completeにはすでに組み込まれています。