2013-05-15 97 views
2

我有一份报告,需要处理它在显示之前从SQL获得的数据。 为此,我有一个自定义代码和一个字典,我推送所有处理的数据。 我的问题是,如果我将报告导出到Word时,将该字典保存在报告变量中,该变量似乎已被清除。 报告变量的生命周期是什么?在报告生活中保存对象最方便的方式是什么?SSRS自定义代码和变量生命

谢谢!

+0

您到目前为止进行了哪些研究和发现?哪些博客文章,文档等等对此有所说明? – Jeroen

+0

我已经搜索了很多关于这个。一种可能的解决方案是在自定义代码中创建一个HashTable 作为共享变量。该哈希可以包含报告所有执行的所有数据,并使用密钥来标识哪些实例处于活动状态。我不太喜欢这种方法。读一些博客,我认为这个问题可能是SSRS 2008的“按需过程”方法。每次导出时都会呈现报告。问题是,我无法承认或找到一个准确的变量循环生活解释,以及为什么它失去了价值。非常感谢你! – crgarcia

回答

2

我一直在玩大约6周的自定义代码,所以我可以回答SSRS 2008 R2中变量生命周期问题的一些部分。

我有使用字典存储总计的报告,允许我提供一些财务资料的专业小计。我有一些你可以检查的东西(因为我还不能评论)。

您是否将该变量声明为“共享”,这是一个不转换为VB.net的自定义代码特定关键字。它确保变量生存到下一页,我对Excel进行了测试,并且Word似乎能够很好地传递变量的数据。

然而,在SSRS“按需报告”引擎(网络上,但不包括BIDS)下存在权衡,它保存变量并且不会在清除缓存本身之前收集垃圾。我写了一些更多的自定义代码来指示我的参数何时更改并清除变量。

代码;

Public Shared Dim Totals As New System.Collections.Generic.Dictionary(Of String, Decimal) 

Public Function WipeKeys() as Decimal 'Clear Data from Dictionary (this will clear the cached object as well) 
    Totals.Clear() 
    Return 0D 
End Function 

我也会建议覆盖关键字,尽可能确保减少附加循环。

Regards,

+0

Hi ChallengeAccepted,非常感谢您的回复!我试图避免使用静态变量,因为垃圾和避免竞争条件。但它似乎是做到这一点的唯一方法。我仍然想知道为什么SSRS清理了一些本地变量,而不是全部(或不是全部)。谢谢!! – crgarcia

+0

没问题,我不得不处理一个拒绝分组和聚合的OLE DB数据源。所以我已经开始非常类似于这些:) – ChallengeAccepted