我正在尝试为使用@UserID 过滤结果的报告创建数据驱动订阅(出于安全目的)。我所看到的作为几个类似问题的答案的解决方案是一个断开的链接。
我们希望有一个用户可以在线访问的版本以及通过电子邮件发送的订阅报告。有没有办法在没有两个版本的报告(一个有用户ID,一个没有)的情况下做到这一点?
我正在尝试为使用@UserID 过滤结果的报告创建数据驱动订阅(出于安全目的)。我所看到的作为几个类似问题的答案的解决方案是一个断开的链接。
我们希望有一个用户可以在线访问的版本以及通过电子邮件发送的订阅报告。有没有办法在没有两个版本的报告(一个有用户ID,一个没有)的情况下做到这一点?
我们开发了一种解决方案,允许将相同的报告用于实时访问以及数据驱动订阅 (DDS)。它基于 djphatic 提供的链接中的概念
首先,我们使用添加到报告中的自定义代码返回 @User 值,而不是使用会使 DDS 阻塞的 User!UserID 函数。该代码类似于 Prologika 解决方案,但我在另一个在线资源中找到了它——我很抱歉不记得我在哪里找到它。代码是:
Public Function GetHashedUser()
Try
Return Report.User!UserID
Catch
Return " "
End Try
End Function
对于我们使用的用户参数默认值:
=Code.GetHashedUser()
如果报表正在实时运行,这将返回 User!UserID。
数据驱动订阅需要使用订阅查询传递用户和其他参数。由于以这种方式传递的任何参数都将在 URL 中可见,因此我们使用用户 ID 的散列版本(称为 userkey)。userkey 对应于我们安全表中的一个值,可以识别用户及其相关权限。我们不加密其他过滤器,因为它们基于用户并用于向下钻取。
请参阅下面的链接。我自己没有对此进行过测试,但我已经看到了之前提到的这个解决方案。