データ アクセスに動作を追加したい場合、Reporting Services はソリューションにならない可能性があります。レポートはデータの表示に最適であり、副作用はありません。
とはいえ、おそらくできる最善の方法は、カスタム コードを使用してレンダリング プロセスを監査することです。たとえば、従業員コードを表示する場合は、表示された人を記録する関数を呼び出します。
Function AuditEmployeeAccess(EmployeeCode As String) As String
' Connect to database, audit access (off the top of my head, could be bad)
Dim con As New SqlConnection
Dim cmd As New SqlCommand
con.ConnectionString = "Data Source=MyServer;Initial Catalog=AuditDb;User ID=username;Password=password"
con.Open()
' Don't do this, use parameters
cmd.CommandText = ("insert into audit (AuditEmployeeCode, AccessEmployeeCode) values ('" + Globals!UserId.Value + "', '" + EmployeeCode + "')")
cmd.Connection = con
cmd.ExecuteNonQuery()
con.Close()
' Return the employee code for display in the report
Return EmployeeCode
End Function
次に、フィールド値を保持するセルの代わりに、次の式を使用します。
=Code.AuditEmployeeAccess(Fields!EmployeeCode.Value)
これで、従業員コードが表示されるときではなく、レンダリングされるたびに監査が行われます。たとえば、レポートが 5 ページの長さであるが、閲覧者が最初の 2 ページしか見ていない場合でも、5 ページのアクセスは引き続き監査されます。
このため、レポートを使用するよりもカスタム画面を作成した方がよいでしょう。