如何在报表查询中使用带有存储过程的iReport进行多选?

时间:2013-04-20 16:09:43

标签: stored-procedures jasper-reports ireport multi-select

我正在使用 iReport 5.0 尝试为 SQL Server 2008R2 后端开发报告。

使用户能够混合/匹配列表中的选择(多选)非常重要。 如果 iReport 中的查询是SQL或具有视图作为源,则多选项很有效 - 例如 http://community.jaspersoft.com/questions/529890/how-do-multi-select-ireport-36

在这种情况下,WHERE $X{IN,<colname>,<iReport parameter>}可以正常启用多选: http://community.jaspersoft.com/questions/519185/using-x-query-parameter-type-not-supporte

但是,我想将所有输入传递到 iReport 查询中的 SQL Server存储过程。在这种情况下,单值输入都可以正常工作 - 但我一直无法弄清楚如何使用多选 - $X{}似乎不起作用,否则 - 因为 iReport 多选参数必须定义为 java.util.Collection - 我得到“查询中不支持的参数类型”。

任何人都可以指出我缺少的东西,或建议解决方法吗?

1 个答案:

答案 0 :(得分:1)

好的 - 我已经进一步了解这一点,并可以展示对我有用的东西: 要使数组SP参数起作用(即使用WHERE IN()子句进行查询,其中输入参数的所有逗号分隔元素都进入IN()):

1 - 从iReport中的调用中删除了参数名称 - 可能会使问题混乱......

2 - 制作iReport PARAMETER: CLINSTAGEGROUP_MULTI 类型: java.util.Collection中

3 - 在Jasperserver上: /usr/local/jasperreports-server-cp-4.5.0/apache-tomcat/webapps/jasperserver/WEB-INF/classes/esapi/security-config.properties 关闭security.validation.sql.on:

security.validation.sql.on =假

这在安装和安装时消除了6626错误使用数组/集合参数运行iReport。

4 - 下载&amp;在SQL Server上安装fn_Split(): http://sqlmag.com/stored-procedures/treat-yourself-fnsplit

5 - 在Jasperserver上安装iReport .jrxml文件

6 - 创建Jasperserver INPUT对象 - 获取clinstagegroup列表的查询,以及Multi-Select Query类型的INPUT CONTROL(参数名称设置为CLINSTAGEGROUP_MULTI),以便识别相同的iReport参数名称)。

7 - 在SQL Server上设置存储过程: CLINSTAGEGROUP_MULTI参数传递到SQL Server存储过程并变为@ClinStageGroup_Multi varchar(4000)

将结果集返回给iReport的示例查询:

选择a,b,c,... n

FROM VW_SpecimenAccessions

WHERE ClinstageGroup

IN(SELECT [value] FROM dbo.fn_split(@ClinStageGroup_Multi,','))

8 - 现在可以在jasperserver报告上切换clinstagegroup(多个)选项,并在屏幕上恢复适当的结果集。

9 - 超过那个障碍 - 现在到了下一个......