SSRS—以编程方式标记何时将报表创建为快照



是否有一种方法可以通过编程方式确定报表是否作为快照运行?

我有一套报告,它们在创建快照时的行为需要与最终用户运行时的行为不同。

差异包括:

  1. Tablix和列可见性
  2. 多参数(包括可用选项和默认值(
  3. 页眉中文本框中的表达式
  4. 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)作为快照标志。

我的主要问题是,然后我使用没有用户名的情况来确定是否应该显示所有数据(正如我想在快照中显示的那样(。这似乎是一个正在形成的安全漏洞。

我更希望有一个明确的快照标志,而不是依赖于快照过程的一些副产品!

最新更新