0

我想了解如何捕获在 Asp.net reportviwer 中呈现的 SSRS 报告的数据审计跟踪。

我不想要执行日志。例如,我的报告以部门为输入,并提供了在该部门工作的员工的所有详细信息。

现在我的要求是,假设我为部门 a 运行报告并找到一些员工,然后我必须记录审计跟踪,说我已经看到某某员工的记录。

我在想,我可以从 SSRS 本身插入已检索或要呈现的记录,但是如果呈现失败怎么办,我的日志仍然会说我已经看到了该记录,甚至在它出现在 ASP.Net 页面上之前。第二种方法是,我必须在使用相同参数呈现数据后再次调用,然后记录结果,这可能会给我错误的结果,因为数据可能在那个小间隔内发生了变化。

其次,有没有办法在 asp.net reportviewer 控件上跟踪保存和打印事件

期待想法。提前致谢。

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 页长,但查看者只查看前两页,则仍将对第 5 页上的访问进行审核。

出于这个原因,您最好创建自定义屏幕而不是使用报告。

于 2013-09-19T04:11:29.840 回答