有没有办法以编程方式确定报表是否作为快照运行?
我有一套报告,在创建快照时需要采用与最终用户运行时不同的报告。
差异包括:
我已经能够解决大多数这些问题,但这是一系列的问题。理想情况下,我希望在整个报告中使用IsSnapshot()
函数。
答案 0 :(得分:0)
我已经能够在表达式中使用IIf(User!UserID = "",True,False)
标记计划的快照(但不是手动触发的快照)。
不幸的是,SSRS意识到User!UserID
是易变的,因此如果我还想使用数据驱动订阅,我也不会使用它:"You cannot create a data-driven subscription on a report that contains the User!UserID expression"
为了解决这个问题,我在报告中编写了自己的公共功能" Code"属性:
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)
作为快照标记。
我的主要问题是,如果我应该显示所有数据(我想要在我的快照中),那么我正在使用缺少用户名来解决问题。这似乎是一个安全漏洞。
我更愿意拥有一个明确的Snapshot标志,而不是依赖于快照过程的一些副产品!