dポイントプレゼントキャンペーン実施中!

お客様の情報をファイルメーカーで管理しています。
各お客様に担当者がいるため、ファイルを共有し、各担当者が各自のお客様の情報のみを閲覧できるようにパスを掛けたいと思っています。
レイアウトやフィールドをパスごとにアクセス権がないようにはできるのですが、それではなく1レコードに1顧客なため、レコードごとにアクセス権を設定したいと思っています。
例えば担当「A」のパスが「123」で、担当のフィールドに「A」という名前が入力してあれば、「123」にてファイルを開けば、その担当の分のみが閲覧できる、としたいのです。
これの設定方法を教えていただけますでしょうか。

また、あわせて、パスにて各自の担当の顧客のレコードが検索抽出できると助かります。
宜しくお願いします。

A 回答 (3件)

ごめんなさい。

根本的に訂正します。

1)パスワードでレコード制限できます。(FM7からの機能と思い込んでいました。)

2)ただし、ステータス関数を使うとわかるのは、そのパスワードの「グループ名」です。
普通は1グループに複数のパスワードですが、今回は1グループ1パスワードにしてみて下さい。

3)「現在の担当」というグローバルフィールドを用意して下さい。
4)”フィールド設定,「現在の担当」,「Status( グループ)」”という内容のスクリプトを作成し、ファイル起動時に実行するように設定して下さい。

5)パスワード定義で、レコードのブラウズの横の一覧を選択して「制限」を選んで下さい。
6)「制限」の中で 「現在の担当」=「担当」とします。(「担当」は各レコードの担当フィールドです)

これで、Aさんのパスワードでファイルを開いた時、担当以外のレコードは<アクセス権がありません>と表示されてデータは見えません。


次に担当レコードのみの表示です。

1)リレーションの定義を開きます。
2)新規作成で、そのファイル自身を選びます(自己リレーション)。
3)「現在の担当」と「担当」フィールドでリレーション設定して下さい。
4)レイアウトモードでボタンを作成して下さい。
5)ボタンの設定は、「関連レコードに移動」、指定は先ほど作成したリレーションです。
これで、このボタンを押すと、担当顧客のレコードだけが表示されます。


最後に「回答くださった方法ですと…」ですが、おっしゃる通りです。(^^;
これを避けるためには、パスワードで検索モードを使えなくして、検索はスクリプトのみでしてもらわないといけません。
    • good
    • 0
この回答へのお礼

重ねてありがとうございます。

教えていただいたとおりにしたところ、出来ました!
あわせて、担当レコードのみの表示も、パスでの制限と同じスクリプト定義に組み込んだところ、開くと同時に絞込みが出来ました。

今、パスの設定をかけているところなんですが・・・なぜか最初の一つ目は絞込みも上手くいったのに、2つ目以降のパスで開くと、開く際に閲覧の制限は出来るのですが、
「このパスワードではこの操作を行うことが出来ないか、またはファイルが変更禁止になっている」というエラーが出て、絞込みが出来ません。

あつかましいついでなのですが、このエラーの起こる原因に思い当たることはありますでしょうか。
パスでの制限はすべて同じにしてあります。
また、ファイルを閉じる際に「全レコードを表示」のスクリプトが起動するように設定してあります。

宜しくお願いします。。

お礼日時:2005/01/29 15:31

「このパスワードではこの操作を行うことが出来ないか、またはファイルが変更禁止になっている」ということは、


A担当のレコードをB担当で見ようとしてるのだと思います。

1)「現在の担当」はグローバルフィールドになっているか。
2)ファイル起動時のスクリプトで「現在の担当」フィールドが担当者毎のグループ名になっているか。
などを確かめて下さい。

デバッグのコツは、仕組みを理解して、関係するフィールドを全部見える状態にして、どのステップで予想外のことが起こるかを絞り込むことです。

1質問2回答までを心がけているので今回はこれで最後にしますが FM6でレコード毎の制限がかけれると知ったのは収穫でした。
hello2さんの質問に感謝です。
それでは頑張って下さい。
    • good
    • 0
この回答へのお礼

何度も、本当にありがとうございました。
かなり基本的な思い違いをしていたようで、今回の回答と前の回答を読み返していて、気がつきました。
パスで制限をかける際、現在の担当=「各担当名」にしないといけないのを、フィールド指定にしておりました。

本当に丁寧なご回答をいただき、ありがとうございました!

お礼日時:2005/01/29 17:48

今手元にファイルメーカーが無いので記憶を頼りに書いています。



基本的には、最後にかかれてあった「各自の担当の顧客のレコードが検索抽出」ができれば解決するのではないかと思います。
スクリプトで、ステータス関数を使えば、今ファイルメーカーを使っている人がわかるはずです。
それが「A」さんであれば、担当フィールドに「A」が入っているものを検索する、とするのはいかがでしょう。
また担当者「A」さんが担当顧客「B」さんを検索したい時は、検索モードで担当フィールドに「A」が入った状態までをスクリプトで準備します。

他には、担当者名を入れるグローバルフィールドを用意して、そのグローバルフィールドと各レコードの担当フィールドを自己リレーションしておくと簡単に担当データのみを表示することもできます。
それと、結果がオブジェクトの計算フィールドを用意して担当顧客以外のレコードデータの背景色を変えて見えにくくするということもできます。

きっとまだまだ色んな方法があると思います。がんばってください。

この回答への補足

ご回答いただきありがとうございます。
なんとなく、仰られていることでどういう風になるのか、の想像はつくのですが、実は関数はCASEしか理解できておらず、ステータスの活用方法も全くわかっていないのが現状のため、回答いただいた状態にどうすればなるのかが分からない状況です。
関数とスクリプトのサンプル活用辞典なるものを片手にもう少し悩んでみます。
ありがとうございました。

ちなみに、回答くださった方法ですと、担当以外のお客さまの情報も見ようと思えば見ることはできてしまうのでは無いかと思ったのですが・・・違いましたでしょうか?

補足日時:2005/01/25 11:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!