イベントを検索して表示する際に、DayBackが実行する検索のリクエストを横取りしてカレンダーにフィルタをハードコードすることもできます。これは、ユーザが変更できないフィルタと考えられます。
ユーザが、自分自身のイベントだけを見るようにするにはどうしますか?
概要
ユーザに対して表示されるイベントを簡単に制限できます。制限するには、2通りの方法があります。フィルタを使う方法と、アクセス権を使う方法です。
フィルタを使う方法はシンプルです。イベントの「オーナー」のフィルタを新たに作成し、カレンダーをあらかじめフィルタリングすれば、そのオーナーのイベントだけが表示されます。ただしこれだけだと、ユーザはフィルタをリセットして他のイベントを見ることができます。このようにしておくほうが便利な場合もあります。
イベントを検索して表示する際に、カレンダーが実行するSQLのリクエストを横取りしてカレンダーにフィルタをハードコードすることもできます。これは、ユーザが変更できないフィルタと考えられます。
どちらのフィルタリングの方法も、カレンダーのインターフェイスを利用して表示内容を制限しています。ユーザは別のレイアウトへ移動し、イベントを検索すると、他のユーザのイベントが検索される可能性があります。これでは都合が悪い場合には、FileMakerのアクセス権の機能を使って、ユーザに対して表示される内容を制限します。この「アクセス権のテクニック」はFileMakerの標準の機能を利用するものであり、DayBackに固有の方法ではありません。
フィルタを使う
あらかじめフィルタをかける
カレンダーに表示される内容を制限する最も簡単な方法は、ユーザがカレンダーを開く際にあらかじめフィルタをかけることです。詳しくは「フィルタ」を参照してください。
見えないフィルタをハードコードする
もうひとつの方法は、レコードを探す際に実行される検索のリクエストを横取りするものです。これは、見えないフィルタと考えられます。この方法を使うには、「Event Find」スクリプトの編集ウインドウを開き、スクリプトの中ほどにある「Hard code any 'hidden' filters here」(「見えない」フィルタをここでハードコードする)のコメントを見つけます。その次にあるIf ()文に、ソースごとに固有の検索条件を追加する方法が示されています。ここでソースに対して、IfやElse Ifの分岐でフィールドを設定します。詳しくはスクリプトのコメントを参照してください。
覚えておきたいのは、おそらく一部のユーザに対してのみこのスクリプトを実行するようにしたいということです。そこで、「フィールド設定」のステップに「userness」を含めるか、Case文を使ってアカウントまたはアクセス権セットごとに異なる検索リクエストを作成します。
アクセス権を使う
簡単に設定できます。FileMakerのアクセス権の機能を使って、ログインしているユーザに応じて、どのレコードが表示されるか、編集できるかなどのルールを作成します。表示できるレイアウトの制限や、特定のフィールドに対してアクセスできるかどうかの制限までできます。
これまでにFileMakerのアクセス権を扱ったことがなければ、FileMakerに付属のヘルプで概要を読み、「目次」>「データベースの保護」>「アクセス権セットの作成と管理」>「レコードアクセス権の編集」を確認してください。
ユーザに対して表示されるレコードの制限については、ヘルプの「レコードアクセス権の編集」ページを参照してください。箇条書き4.の下にある「制限」のオプションについての説明が参考になるでしょう。
ヒントとテクニック
ここでテクニックを要する部分は1つだけです。それは、ユーザのログインの状況を把握して、それをカレンダーのイベントのテーブルのフィールドと結びつけることです。これに使用できるのは、「Get ( アカウント名 )」と「Get ( アカウントアクセス権セット名 )」です。アクセス権セットの名前はおそらく「administrator」や「sales rep」といった一般的なもので、FileMakerのアクセス権を使ってどのユーザから見えるか、編集可能かを制限している可能性があります。たとえば、アクセス権を作成して、営業担当者はDayBackの「Under the Hood」レイアウトにはアクセスできないようにするなどの例があります。
そこでおそらく、アクセス権の計算式で「Get ( アカウント名 )」を使って、ログインしているユーザと、予定に結びつけられているユーザを比較することになるでしょう。これには2つのやり方があります:
方法1
ユーザのアカウント名を、データベース中の既存のフィールドに一致させることができます。アカウント名はすべてユーザの実際の姓名にします。たとえば「Bill Smith」のようなアカウント名になります。そのようにしていると、ログインしているユーザの予定だけを表示するためのアカウント名の計算式は、以下のようになります:
Not isEmpty ( FilterValues ( List ( SampleEvents::UserNameFirstLastCalc ) ; Get ( アカウント名 ) ) )
この計算式は、「Source No 1」レイアウトに使用しているのと同じテーブルオカレンスのコンテクストから評価されるように設定していることに注意してください。このため、この計算式に関して注意すべき点がいくつかあります。まず、この計算式は「1」または「0」の値を返すだけであるということです。アカウント名が、予定と結びつけられているユーザの名前のうちの1つである場合は、「1」を返します。そうでない場合は「0」を返します。アクセス権の計算式はこのように作成する必要があります。ユーザがレコードを見たり編集したりできる場合には「1」(すなわち「真」)を返すということです。また、「=」の記号を使用しないことにも注意してください。その理由は、複数の人に関係する予定もあり得るため、予定を所有しているユーザは、特定の誰か1人のユーザと「イコール」ではないからです。「=」の代わりに、「FilterValues」を使って、アカウント名が予定に関係するユーザの「メンバーである」かどうかを判断しています。
方法2
2つめの方法は、ユーザのテーブルにフィールドを作って、アカウント名と一致させるということです。基本的にはアカウント名をFileMakerに記録します。もちろん、ユーザのパスワードをFileMakerにセキュアでない形では記録してはいけません。
ユーザ名の索引がイベントのテーブルにない場合、この計算式はソリューションの処理速度をきわめて低下させることに注意してください。FileMakerは表示のためにイベントのひとつひとつについて関連する情報を探すからです。
もちろん、一部のユーザは全員の予定が見られるようにしたいということもあるでしょう。この場合も、上述の計算式を大幅に変える必要はありません。一部の「パワーユーザ」に対して、予定の表示をまったく制限しないアクセス権セットを割り当てるだけです。
この2つめの方法は、SeedCode Complete ( ※英語版のみ。日本未発売 ) にはすでに組み込まれています。
原文:OnlySeeMyEvents|https://www.seedcode.com/pmwiki/index.php?n=DayBackForFileMaker.OnlySeeMyEvents
コメント
0件のコメント
サインインしてコメントを残してください。