Reporting Services报告中的自定义代码

时间:2008-11-06 21:49:21

标签: reporting-services

在Reporting Services中,我想添加一个包含自定义代码块数据的参数。理想情况下,我可以运行以下代码(这是一个简单的测试示例):

Function GetPeriods() As String()
 Dim values As System.Collections.ArrayList = 
    New System.Collections.ArrayList()
 For i as integer = 1 to 24
    values.Add(i)
 Next
 Return values.ToArray()
End Function

并将以下内容放在参数的“文本字段”中:

=Code.GetPeriods()

但是,当我运行报告时,我应用此参数的参数被禁用并为空。是否应该使用不同的技术?或者我做错了什么?

7 个答案:

答案 0 :(得分:2)

如果您正在使用SQL 2008 Reporting Services,那么您可以查看this page,其中介绍了使用自定义程序集的概念。

如果您使用的是SQL 2005 Reporting Services,那么this link就是您想要的那个。

这是一件非常简单的事情,只需将您的代码编译成类库并按照提供的说明进行操作即可让您的报告引用它。

答案 1 :(得分:2)

您正在将一个数组项(一个字符串数组)返回到文本字段中。相反,尝试返回一个纯字符串。这应该工作。如果您仍想返回数组列表,则必须将其基本绑定到RDL中的列表控件。你绝对可以使用数据集扩展来做到这一点。但是,我不确定是否还有其他简单方法。检查列表控件的属性,看看它是否允许您直接绑定到数组列表。

答案 2 :(得分:1)

您可以在SQL Server上创建相同的存储过程,并从该过程加载参数值。

答案 3 :(得分:1)

我检查了你的代码。唯一错误的是你的函数返回String()。当我更改方法签名以返回Array时,它在我的报告中工作正常。

将签名更改为Function GetPeriods() As Array

答案 4 :(得分:1)

要访问在SSRS报告的自定义代码中实现的成员/功能,您应将访问修饰符设置为“公共”:

Public Function GetPeriods() As String
...

参见文章Writing Custom Code in SQL Server Reporting Services

答案 5 :(得分:1)

我一直在尝试做同样的事情,从报告代码中设置一个简单的参数值列表。这些答案中的任何一个链接都没有显示如何做到这一点,经过相当多的挖掘,我认为它甚至不可能。是的,可以从数据库查询,Web服务或自定义程序集中获取值,但与从单个函数调用中获取列表相比,每个都会产生大量开销,如= Code.GetValues() ,函数使用For循环创建值。

msvcyc指出该参数需要一个字符串值,但该函数返回一个数组是正确的。我按照prashant sable的建议将返回类型更改为Array,但是选择列表仍然是灰色的,它不起作用。并且冷却是正确的,说访问修饰符应该是公共的。

在我的挖掘中,我发现2005年的an article by James Kovac指出了为什么这是不可能的。 Parameters类有一个get方法,但没有set方法。在SSRS 2008的VS 2008对象浏览器中,对象名称已更改,但它仍然不包含set方法(请参阅Microsoft.ReportingServices.Interfaces.IParameter.Name或.Value)。

我目前的解决方法是硬编码值列表,但如果您的值列表需要是动态的,那么您唯一的选择是数据库查询,Web服务或自定义程序集。我认为这三个最简单的解决方法是从oleksiy.t建议的数据库引擎中获取值,只要您可以编写查询以返回所需的值列表。您的整数列表或我的时间间隔列表都可以轻松查询。否则,您将需要使用另外两种解决方法之一。

答案 6 :(得分:0)

我见过的所有内容都要求参数及其各自的设置成为RDL的一部分。

话虽如此,如果你要对这些值进行“硬编码”,你可以为报告创建一个数据集,可能是XML,或者如果需要以编程方式驱动,可以在Web服务中进行。 / p>