我们目前正在ASPX页面中使用ReportViewer控件,以便以远程处理模式向用户呈现报表。
用户无权访问报表服务器,但我们希望确定谁已运行报表,因此我们希望将应用程序用户ID作为参数或其他方式传递,以便我们获得此可见性。
当应用程序运行报告时,应用程序的用户名将插入ExecutionLog表中。有没有一种方法可以覆盖它以允许自定义输入或在运行报表时传递参数的某种方式以便能够捕获它。 ExecutionLog有一个XML字段,用于显示看起来很有希望的其他信息,但我还是决定将用户id插入参数字符串。
我似乎无法找到一种方法,没有我考虑过的方法:
我确信我们不能成为唯一有这个问题的人,但到目前为止谷歌还没有找到任何有用的东西。
答案 0 :(得分:1)
我认为,挑战是如何将应用程序的用户ID纳入报告生成过程,因为实际的报告生成发生在不同的服务器上,并且您必须与之通信的唯一方法是通过ReportViewer
的方法,事件和属性。 (或报表执行Web服务,但您说您使用的是ReportViewer控件。)
我真的认为为用户ID添加参数并以编程方式设置它(可能在ReportViewer的SubmittingParameterValues
事件触发时)是您最好的选择。执行日志有一个名为Parameters的列,该列应该包含参数值。
我同意在超过六打左右的报告中手动添加和配置新参数将是繁琐且容易出错的。但是,由于报表定义是XML文件,并且可以通过编程方式从报表服务器获取和写入(使用报表管理Web服务),因此您可以非常轻松地自动执行该过程。
很有可能确定表示新用户ID参数所需的XML片段,然后编写代码以获取每个报告定义,将新片段插入适当的位置,并编写新的报告副本定义到服务器,准备测试。
我能想到的唯一其他选择是尝试使用自定义Security Extension,但我不熟悉它,以了解是否可以弥补应用程序报表服务器的差距。