BIRT使用MultiSelect列表框时出现问题

时间:2013-03-21 13:25:29

标签: birt

我应该使用MultiSelect List Box(Dynamic one),用户可以选择多个值(通过按住Ctrl键)来查看报告。

因此,在实现时,我尝试在 BeforeOpen 方法中获取param值并将其传递给DataSet,使用IN运算符将其附加到where子句。我在屏幕上出现SQL错误 。因此,当我打印param值时,它会像 [Ljava.lang.Object; @ 26ba26ba] 一样导致查询错误。我以为我无法在脚本中处理多选参数值并将其传递给查询。所以放弃了那个想法。

现在我在数据集中使用 BIRT的内置过滤器功能。我在SQL中使用 Beforeopen方法中的脚本做了什么,现在我在数据集过滤器中做同样的事情。我使用了 row [“dataColumn”] IN param [“param”]。value ,它运行正常。我可以从过滤器屏幕中选择一个或多个值,执行报告并获得正确的结果。

现在我需要实现的另一件事是应该在筛选器列表框中选择全部,以便用户只需选择全选并为所有数据提供报告,而不是选择任何其他值。我正在针对全选传递'%'。由于我使用IN运算符,因此无法获得有关Report的任何数据。

我想提供Select All功能和多选,但不能为上述限制提供。或者我可以使用Ctrl + A来选择所有,它也可以工作,但我可以这样做,但这是我需要实现的。

我正在使用 BIRT版本=“3.2.17”

任何想法都会得到赞赏......谢谢提前.. :)

1 个答案:

答案 0 :(得分:1)

您是否可以在参数选择中添加“全选”选项?我使用带有参数查询的联合并只在我的查询结果中添加“全选”来完成此操作。

通常情况下,我要做的是在查询中添加一些内容,让我可以轻松替换参数。类似的东西:

SELECT myStuff
FROM myTables
/**where**/

然后,您可以在beforeOpen语句中修改DataSet查询。

有些事情:

if(params["myParam"]!='Select All'){
    this.queryText=this.queryText.replace("/**where**/","WHERE myStuff IN ('" + params["myParams"].join("','") + "')");
} 

这显然非常简化,但您应该能够使用它的某种形式来提供您所要求的内容。