第1章 概述
UniEAP Report的参数有多种类型,可以实现很多复杂的查询条件,如包含关系、模糊查询、自动替换空参数等应用场景。
第2章 特殊场景参数的用法
2.1 可能为空的参数处理方法
参数经常要用到SQL数据集中,在SQL语句中充当条件,甚至充当查询列名。有些参数要求用户必须填写,为必填参数,有些参数允许用户不填,为非必填参数(可能为空),当存在非必填参数时,使用方法有所不同。
UniEAP Report引擎在处理空参数的逻辑是将该参数所在的条件表达式替换为一个始终为真的表达式,如1=1,但在一些较为复杂的SQL中很难在程序中确定参数所在的完整表达式,当传入参数为空时就可能会出现替换出错的情况,导致SQL无法执行.。
针对这种情况的存在报表提供两种标识符---{# #}和{@ @},手动来标识出一个参数所在的完整条件表达式,在报表引擎发现参数为空时就可以准确的找出这个表达式,并对其进行替换。
简单来说,参数为空时{#... #}在实际运行中被替换为“1=1”,{@...@}在实现运行中被替换为“”。使用时,可以根据此原则来写SQL语句。下面用例子说明。
例如上图,如果shipregion为空,shipcountry参数为’中国’时,实际运行的sql语句为:
select distinct shipcity,shipregion,shipcountry from orders where shipcountry='中国' and 1=1
又例如:select from employee where {# $a=1 #} and {# birthday < to_date($b,’yyyy-MM-dd’) #} {@group by {@ $employeeId,@} {@$name@}@}。当所有参数都为空时,这个SQL就变成了:select from employee where 1=1 and 1=1。
【注意】 请大家在使用参数的时候尽量使用{##}或{@ @}将参数表达式扩起来,特别是当参数可能为空的时候。
2.2 实现in类型的参数
2.2.1 方法一
1.在报表设计器中新建参数时,参数值类型要选择‘字段’,这时该参数的值在拼接到sql中时,作为sql片段,不会增加单引号。
【注意】这种使用方法需要慎重考虑sql注入的安全问题。
2.假设将参数in_param赋值为1,2,3,4,5
3.数据集SQL写法
4.通过报表引擎处理以后实际运行的SQL语句为:
Select * from product p where p.product_id in (1,2,3,4,5)
【注意】n类型的参数最重要的就是设置参数值类型为字段。
2.2.2 方法二
UniEAP Report为传递字符串类型的多值提供了一个特殊的分隔符“:;”,即一个冒号加一个引号,用来分隔多个值。下面通过一个例子说明具体用法:
1.在报表设计器中新建参数时,数据类型选择‘STRING’。
2.假设将参数str_param赋值为:榨汁机:;茶几:;冲锋衣,注意这里不要写单引号。
3.数据集SQL写法:
4.经过报表引擎处理后实际执行的SQL语句为:
Select * from product p where p.product_name in (‘榨汁机’, ‘茶几’, ‘冲锋衣’)
【注意】这种方法只适用于参数值为字符串的情况。
2.3 模糊查询的实现方法
1.将参数的数据类型设置为字段,比如参数paramname,设置成字段 数据类型
2.编写SQL:
select * from product where {# name like '%$paramname%' #}
3.如果数据集SQL中需要作为条件比较的字段为数值类型,如下:
select * from product where {# name like %$paramname% #}
【注意】field类型参数的特点在于拼接数据集SQL的时候不会在参数两端自动添加引号,字符串类型的参数在拼接SQL的时候会在字符串两端自动添加引号。
2.4 如何给复选类型控件参数传值
在通过url或者使用openreport公式打开报表时,如果想给目标报表的一个复选类型参数传值,我们需要在多个值之间使用 :; 来分隔,这个是报表针对复选类型参数定义的分隔符.请参考下面实际应用场景来理解:
1.通过OpenReport公式访问报表时,传递参数值1,2,3给CheckBox类型的参数.
=OpenReport(‘reportid’,param_name,’1:;2:;3’)
2.使用URL的方式访问报表,传递参数值1,2,3给CheckBox类型的参数,URL传递中文可参考“集成开发”目录下“URL中文参数处理办法”。
http://127.0.0.1:8081/report/Report-EntryAction.do?reportId=REPORT-C95C7FD38AA00001BA805724B56050C0&s2=1:;2:;3
3.调用“复选”控件类型的参数时所返回的实际是一组值,也就是一个list,在1和2中所描述的参数,在目标报表中调用时会得到List(1,2,3)这样一组值,如下图所示,创建一个名为s2的参数,控件类型为复选按钮:
在报表中使用该参数,上面已经描述过,复选按钮类型的参数返回的一组值,可以多选点击查询,如下
通过URL方式访问报表传递参数,报表展现效果如下图:
2.5 参数校验实现方法
如果想要输入参数时,筛选一些值,可采用参数管理校验功能,请参考下面实际应用场景来理解: 新建一个参数,可以通过正则表达式或JavaScript实现判断参数值
正则表达式值小于32
/^[0-9]$|^[0-2][0-9]$|^3[0-2]$/
加入提示信息,当不满足检验条件时,报提示信息,不允许输入小于32的值
预览,输入值为40,效果如下:
当输入参数值小于32时,可以正常查询数据。