0

Asp.net reportviwer でレンダリングされる SSRS レポートのデータ監査証跡をどのようにキャプチャできるかについて知りたいです。

実行ログは必要ありません。私のレポートの例では、入力として部門を取り、その部門で働く従業員のすべての詳細を示します。

ここで私の要件は、部門 a のレポートを実行し、何人かの従業員を取得したとしましょう。次に、従業員の記録を見たことを示す監査証跡をログに記録する必要があります。

SSRS自体から、取得またはレンダリングするレコードを挿入できると考えていましたが、レンダリングが失敗した場合、ASP.Netページに表示される前でもレコードを見たとログに表示されます。2 番目の方法は、データが同じパラメーターでレンダリングされた後に別の呼び出しを行い、結果をログに記録する必要があることです。これにより、データがその短い間隔で変更された可能性があるため、間違った結果が得られる可能性があります。

次に、asp.netレポートビューアーコントロールで保存および印刷イベントを追跡する方法があります

アイデアお待ちしております。前もって感謝します。

4

1 に答える 1

1

データ アクセスに動作を追加したい場合、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 ページのアクセスは引き続き監査されます。

このため、レポートを使用するよりもカスタム画面を作成した方がよいでしょう。

于 2013-09-19T04:11:29.840 に答える