![]() |
1
9
简单部分是报告参数:将显示类型设置为列表框,然后选中允许多个值选项。 现在最难的部分是:不幸的是,您不能将多值报表参数绑定到数据集参数(至少在3.2版中没有,我使用的是这个版本)。Birt World博客上有一个帖子: http://birtworld.blogspot.com/2009/03/birt-multi-select-statements.html 它描述了如何使用代码插件将多选报表参数绑定到报表数据集。
不幸的是,当我尝试它时,它不起作用。如果你能让它工作,那就是我推荐的方法;如果你不能,那么另一种方法是修改数据集的querytext,在适当的点将report参数中的所有值插入到查询中。假设
然后可以从的beforeopen事件脚本调用 数据集 ,像这样:
假设您的报告参数称为rpid。您需要修改您的查询,如下所示:
0包含在脚本中,以便查询脚本在设计时有效,并且数据集值将正确绑定到报表;在运行时,将删除此硬编码0。 但是,这种方法可能非常危险,因为它可能使您容易受到SQL注入攻击: http://en.wikipedia.org/wiki/SQL_injection ,如本文所示: http://xkcd.com/327/ . 如果是从预先定义的选择列表中选择的纯数字值,则不可能进行SQL注入攻击;但是,在允许参数的自由格式输入字符串的情况下,同样的方法很容易受到攻击。 |
![]() |
2
5
仅供参考:BIRT World的文章应该有效(我写的),但这是对这个问题的早期解决方案。 我们已经创建了一个开源插件,您可以将它添加到BIRT中,这样可以更清晰地解决这个问题。BIRT函数库中的绑定参数函数提供了一种从多值参数中进行多重选择的简单方法。 如果您仍然感兴趣,请查看 birt-functions-lib project 在Eclipse实验室。 |
![]() |
3
2
这是另一个。基于我在别处找到的一些提示,我进行了扩展以保留数据集SQL中的参数数量。此解决方案与您在打开数据集之前调用的javascript函数一起使用:
在查询中,替换出现的(?)@ XYZ?以上方法确保 查询具有实际值,仍然是一个参数(这样数据集编辑器和预览就不会抱怨)。 注意:注意SQL注入,例如不允许字符串值 |
![]() |
4
2
我创建了一个更通用的解决方案,它处理 可选/必需参数 行为也是如此。当参数不是必需的并且用户没有选择任何值时,IN子句将被禁用。它还允许用户同时选择实值和空值。
在报告中
使用实例在数据集查询中,将特殊IN子句:
在
注意,我使用了一个占位符,它允许查询也在替换之前运行(例如,它有引号,因为f4是varchar)。 您可以构建一个适合您的案例的占位符。 |
![]() |
Smoki · 在BIRT中隐藏交叉表中的空行 10 年前 |
![]() |
Saurabh Singhal · 基于参数的birt水印 11 年前 |
![]() |
Jeanne Lane · 在Eclipse的BIRT插件中编辑XML源 11 年前 |
![]() |
user1399217 · 隐藏出生报告上的摘要列 12 年前 |