是否有一种方法可以通过编程方式确定报表是否作为快照运行?
我有一套报告,它们在创建快照时的行为需要与最终用户运行时的行为不同。
差异包括:
- Tablix和列可见性
- 多参数(包括可用选项和默认值(
- 页眉中文本框中的表达式
- tablix单元格中的表达式
我已经能够解决大多数这些问题,但这是一系列的拼凑。理想情况下,我想要一个可以在整个报告中使用的IsSnapshot()
函数。
我已经能够在表达式中使用IIf(User!UserID = "",True,False)
来标记计划快照(但不能手动触发快照(。
不幸的是,SSRS意识到User!UserID
是不稳定的,因此如果我也想使用数据驱动订阅,就不允许我使用它:"您不能在包含User!UserID表达式的报表上创建数据驱动订阅">
为了解决这个问题,我在报告"代码"属性中创建了自己的公共函数:
Public Function UserName()
Try
If IsDBNull(Report.User!UserID) Then Return ""
If IsNothing(Report.User!UserID) Then Return ""
Return Report.User!UserID
Catch
Return ""
End Try
End Function
因此,我的报告使用IIf(Code.UserName() = "",True,False)
作为快照标志。
我的主要问题是,然后我使用没有用户名的情况来确定是否应该显示所有数据(正如我想在快照中显示的那样(。这似乎是一个正在形成的安全漏洞。
我更希望有一个明确的快照标志,而不是依赖于快照过程的一些副产品!