过滤器中使用参数
从1.0.7版本开始,可以在过滤器中添加参数,从而实现基于参数的数据过滤功能。
为了演示该功能,创建一个新的报表模版,打开报表设置窗口,在报表参数页签中定义五个参数,如下图所示:
可以看到,这五个参数,分别对应参数中的五种数据类型,这样就可充分展示这五种类型参数在SQL查询中的使用方式。 这里还是使用示例数据库的employee表,针对该表的查询中我们通过表达式的方式来返回SQL,如下图所示:
具体的SQL脚本如下:
${
var sql="select * from employee where 1=1";
if($sex!=null && $sex!=""){
sql=sql+" and sex=${$sex}";
}
if($employeeId){
sql=sql+" and employee_id like ${$employeeId}"
}
if($salary){
sql=sql+" and salary>${$salary}";
}
if($birthday){
sql=sql+" and birthday > ${$birthday}";
}
if($deptIds){
sql=sql+" and dept_id in ${$deptIds}"
}
return sql;
}
上面的代码中所有内容放在${......}中,这就表示当前的SQL是一段BaskReport的脚本表达式。表达式语法比较简单,这里简单介绍一下:
- 第一行通过var 定义一个名为sql变量。
- 第二行判断名为sex参数值是否为空字符串且不为null值(BaskReport中,通过$符号开头来引用一个具体参数,比如这里的 $sex 就表示引用名为sex参数)。
- 第三行如果参数sex值不等于空字符串,那么就拼装SQL(sex=${ $sex} 这里首先通过 ${}来引用一个表达式,表达式的值是 $sex ,表示取名为sex的参数)
- 后面的代码都在完成类似的SQL拼装操作,最后通过return返回sql变量
接下来点击工具栏上的过滤器配置按钮,将这些参数添加到过滤器中,如下图所示:
最后将若干字段与单元格绑定,效果如下图: 预览报表,效果如下:
需要注意的是对于集合类型的参数deptIds,为了能让服务端收到多个值,这里在过滤器中输入中以,分隔多个值,这样就可以在SQL中使用in关键字进行过滤查询。
可以看到将参数添加到过滤器中使用,可以快速实现类似针对SQL中参数查询之类功能,当然所有与参数进行交互的操作都可以通过将其添加到过滤器中实现。