初心者のFileMaker pro Q&A

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。

何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

ログインしていません。

アナウンス


#1 2020-10-29 01:04:46

独学2年目
ゲストユーザー

アカウントごとに表示するレコードを分けたい

お世話になります。

タイトルの通り、アカウントごとに表示するレコードを分けたいです。
そもそも、下記の要件が実現可能なのかどうか、ご教示お願いいたします。

・情報を持たせるテーブルは一つとしたい。
※アカウント別にテーブルを作成し、それぞれのテーブルに対象レコードを作成するのは不可。
・Ctrl+Fなど、ショートカットは全て使用可能としたいため、検索ボタンにスクリプトを仕込むのは不可。
※数万レコード発生する想定のため、検索時に常時計算が走るのも避けたい。
・計算式でアクセス権限を設定し〈アクセス権がありません〉の表示になるのは避けたい。
※FMの特性である、自由度の高い検索やエクスポートの機能は使いたい。

初回ログインを設定し、グローバル「アカウント名」フィールドに、アカウント情報を保持する想定です。

理想は、情報を保持するテーブルと、各アカウントごとに閲覧するテーブルが存在し、
閲覧テーブルに仮想で、対象レコードのみを参照させるというイメージなのですが、
FMで実現する方法を思いつかず、そもそも可能なのか?も含めて知りたいです。

環境は、FM19 Windowsです。

#2 2020-11-09 11:52:11

MTK
メンバー

Re: アカウントごとに表示するレコードを分けたい

ずっとコメントが付かないので私の思いつく限りの方法を。
今ちょっと検証ができないため、ダメだった場合はご容赦下さい。

まず確認ですが、どのレコードを誰が見られるか はどのように判定するのでしょうか。
ここでは仮に、情報保持テーブルに「閲覧権限ユーザー」フィールドがあり、そこに権限があるアカウント名が記録されているものとします。

①レコードにアクセス権を設定する方法
〈アクセス権がありません〉の表示を避ける方法として、何かしらの条件で一度レコードの検索をする方法を聞いたことがあります。
レイアウト表示時のトリガーに検索するスクリプトをつけておき、全件がHITするような条件でいいので検索をするようにします。
すると、そのレイアウトに移動する際には必ずその検索が行われ、アクセス権がないレコードは自動的に対象外となるはずです。
Ctrl + F等で検索した場合も、アクセス権がないレコードは自動的に対象外となるはずです。

②リレーションを使って制限をする方法
まず、グローバル「アカウント名」フィールドのみのテーブル(仮にアカウント情報テーブル)を作成します。
それと別に情報保持テーブルがある状態で、情報保持テーブルには「閲覧権限ユーザー」フィールドがあるとします。
[アカウント情報テーブル]-[情報保持テーブル] とリレーションをし、リレーション条件として
アカウント情報テーブルの「アカウント名」フィールドと情報保持テーブルの「閲覧権限ユーザー」フィールドを=で結びます。
その上で、レイアウトのテーブルオカレンスを [アカウント情報テーブル]-[情報保持テーブル] にします。
そうすれば検索されても自分の権限のレコードしか出ないかと思います。

以上2点ですが、ご要望と違う解決でしたらすいません。

オフライン

#3 2020-11-09 13:29:29

Moz
メンバー

Re: アカウントごとに表示するレコードを分けたい

・計算式でアクセス権限を設定し〈アクセス権がありません〉の表示になるのは避けたい。

この辺りがレスが付かない理由のひとつかなと。

MTKさんも書かれていますがアクセス権セット(レコードのカスタムアクセス権)を利用すれば
検索・リレーションなどではアクセス権のないレコードは表示されませんので簡単です。
標準機能を阻害せずに実装できるのがアクセス権セットです(標準機能ですから)。

どこの情報が元か分かりませんが、変な計算式でなければ(アカウント名程度では)パフォーマンスは著しく落ちたりしません。

注意する点は[全レコードを表示]は検索ではないのでアクセス権のないレコードがみっともないことになります。
とはいえ全レコードを表示する場面というのはそれほどないのでカスタムメニューでメニューから消したり、
ステータスツールバーを消すなどで利用できなくしておけば良いでしょう。
どうしても使わせたいならボタンやカスタムメニューの置き換えで主キーでの検索にでもしておけば良いです。

命名規則が整っていればテーブル毎に主キーのフィールド名が違うこともないでしょうから、
主キーに値があるレコードの検索スクリプトは共通化も容易です。

あれこれ構造やインタフェースをこねくり回すよりおすすめです。

Claris Webセミナー「基本のセキュリティ」

編集者 Moz (2020-11-09 13:30:46)

オフライン

#4 2020-11-09 13:39:45

Shin
メンバー

Re: アカウントごとに表示するレコードを分けたい

> 理想は、情報を保持するテーブルと、各アカウントごとに閲覧するテーブルが存在し、
> 閲覧テーブルに仮想で、対象レコードのみを参照させるというイメージ
デカルト積のリレーションでいいのでしょうが、アカウントごとにテーブルを存在するのでしたら、構造として矛盾します。
情報を保持するテーブルで、普通にレイアウトを作り、閲覧編集をさせればいいと思います。
一つ問題は、
> ・計算式でアクセス権限を設定し〈アクセス権がありません〉の表示になるのは避けたい。
でしょうが、これが必ず出てしまう状況が、Mozさんの指摘にもある、全レコードを表示です。これを、カスタムメニューで、適当なフィールドで "*" を検索(実際には全レコードを検索するはずですが、アクセス権を反映します)させる動作へ変更するのと、各スクリプトで配慮しておく、という対策で十分なはずです。(テーブルごとにアクセス権が異なり、制限がかかっている関連レコードを参照しているのでしたら、どうしようもないですが)

オフライン

クィック投稿

メッセージを書いて送信してください。
登録の確認

実在の人物による登録であることを確認します。

Board footer