読者フィールドに自分のアカウントや自分が所属するグループ、あるいは自分に付与されたロールが無い場合、その文書を閲覧することができません。
しかしながら、自分が閲覧できる文書がデータベースの中に1件も無い場合でも、データベースのプロパティには、閲覧できない文書を含む文書数が表示されます。エンドユーザーは何か見えない文書があることがわかるわけです。
さて、NotesDatabase クラスの Search メソッドや FTSearch メソッドを使う場合、検索条件に一致すれば、閲覧できない文書もヒットします。
これらのメソッドでは NotesDocumentCollection クラスのインスタンスが返ります。
もし、自分が閲覧できない文書がヒットした場合、それを GetFirstDocument や GetNextDocument を使って NotesDocument クラスのインスタンスが作られるのでしょうか。
次のようなコードを書きました。
Dim ss as New NotesSession Dim db As NotesDatabase Dim dc As NotesDocumentCollection Dim doc As NotesDocument Dim Query As String Query = |[Subject] contains "request"| Set db = ss.CurrentDatabase Set dc = db.FTSearch( Query, 0 ) Set doc = dc.GetFirstDocument While not doc is Nothing set doc = dc.GetNextDocument( doc ) Wend
このコードを実行して閲覧できない文書が検索にヒットした場合、GetFirstDocument や GetNextDocument で取り出した NotesDocument は Nothing になりませんが、UniversalID プロパティや NoteID プロパティの値は "" となりました。また NotesDocument クラスの Items プロパティの値はヌルになるため、フィールドの値へアクセスすることもできません。
つまり、見えない文書が存在することは分かるけれども、その詳細にはアクセスできないのです。
ここで注意しなければならないのは、読者フィールドを使ったデータベースでは、閲覧できない文書がヒットすることも想定しなければならない、ということです。
実は、私が書いたコードで「結果がなんか変だよ」と指摘があり調べたら、この想定がされてなかった、ということがあったのを思い出しました。
皆様も読者フィールドによる閲覧制限機能を後から追加するような変更を行う場合は、ぜひともご注意ください。
0 件のコメント:
コメントを投稿