編集者アクセスに削除権限を付与した場合、閲覧権限のある文書はすべて削除できてしまいますが、これを制限したいといった要望もあります。
そんなとき、削除の許可を判断するロジックをデータベーススクリプトにある QueryDocumentDelete イベントへ記述します。
以下の記述例では次のような判断を行い、削除を制限しています。
・管理者ロール[Admin]を付与されている場合、削除できる
・自身が(アイテム"CreatedBy"に設定されている)文書の作成者であれば削除できる
・複数の文書を選択した場合、ひとつでも他人が作成した文書があれば削除できない
Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant) Dim dc As NotesDocumentCollection Dim doc As NotesDocument Dim username$ Dim dbadmin As Variant dbadmin = Evaluate(|@IsMember("[Admin]"; @UserRoles)|) If dbadmin(0) <> 0 Then Exit Sub username = Source.Database.Parent.UserName Set dc = Source.Documents If dc.count = 0 Then Exit Sub Set doc = dc.GetFirstDocument While Not doc Is Nothing If doc.HasItem( "CreatedBy" ) Then If username <> doc.GetItemValue( "CreatedBy" )( 0 ) Then Continue = False Exit Sub End If End If Set doc = dc.GetNextDocument( doc ) Wend End Sub
削除しようと選択した文書は NotesUIDatabase クラスの Documents プロパティから取得できます。
ビューから複数の文書を選択してDeleteキーを押した場合など、複数の文書が戻ることもありますので、戻り値は NotesDocumentCollection です。
文書の削除を続行させたい場合、Continue を True として処理を抜けます。
削除させたくない条件にひっかかったら、 Continue へ False を代入します。
削除できないことを Messagebox などで教えてあげるとより親切ですね。
0 件のコメント:
コメントを投稿