1. 概述
1.1 预期效果
当用户需要对表中的同一字段实现多值查询时,可以使用文本域控件。如下图所示,当文本域参数有多个订单 ID 时,查询结果为多个订单 ID 的信息,如下图所示:
1.2 实现思路
用户可通过两种方法实现文本域控件多值查询,采用报表的过滤功能设置过滤条件,或通过 SQL 语句过滤。
2. 示例一:添加过滤条件实现
2.1 设计报表
1)新建普通报表,选择「数据库查询」,新增数据集 ds1,SQL 语句为:SELECT * FROM 订单
2)将数据集 ds1 的字段拽入报表单元格中,设计表格样式。如下图所示:
3)选中表格中的 A2 单元格,点击「条件属性」,点击「+」,属性选择「背景」,颜色选择紫色,类型选择「公式」,设置为「当前行」,公式为 row() % 2 = 0,点击「增加」。如下图所示:
2.2 添加文本域控件
在参数面板中,添加「文本域控件」和「查询按钮」,将「文本域控件」控件名称设置为 AK ,如下图所示:
2.3 添加过滤
双击 A2 单元格,点击「过滤」,类型选择「公式」,公式内容为:INARRAY($$$, split($AK, "\n")) > 0,点击「增加」和「确认」。公式的作用为将文本域控件里的文字,按照换行符进行分割,每行为一个查询值,并匹配当前单元格内容是否为文本域控件中输入的其中一个值。如下图所示:
2.4 效果预览
2.4.1 PC 端
保存模板后,点击「分页预览」,在「文本域控件」中输入订单 ID ,PC 端效果如下图所示:
2.4.2 移动端
App 及 HTML5 端效果如下图所示:
3. 示例二:通过 SQL 语句实现
3.1 新建数据集
新建普通报表,选择「数据库查询」,新建数据集 ds1 ,SQL 语句通过 in 查询文本域控件中以换行输入的订单 ID 的数据,并使数据在数据集中过滤。SQL 语句为:SELECT * FROM [订单] where 1=1 ${if(len(AK)>0," and 订单id in ('" +replace(AK, "\n","','")+ "')","")},公式的作用为调取表中订单 id 的值与参数 AK 的值相同的行,按照换行符进行分割,每行为一个查询值。如下图所示:
3.2 设计报表
1)将数据集 ds1 的字段拽入报表单元格中,设计表格样式。
2)选中表格中的第 2 行,点击「条件属性」点击「+」,属性选择「背景」,颜色选择紫色,类型选择「公式」,公式为 row() % 2 = 0,点击「增加」。如下图所示:
3.3 添加参数控件
点击「参数面板」,选择「全部添加」,选择「文本域控件」,删除「标签控件」。如下图所示:
3.4 效果预览
1)保存报表后,PC 端预览效果,如 2.4 节所示。
2)App 及 HTML5 端预览效果,如 2.4 节所示。
4. 注意事项
问题描述
有时用户默认文本中含有多余内容,需要只针对每条记录中的部门内容进行过滤,这种情况直接查询将会无法显示。
解决方案
若默认文本中含有多余内容,需要只针对每条记录中的部门内容进行过滤,就需要对内容值进行处理,再进行数据过滤查询。如下图所示:
具体步骤如下所示:
在参数面板另外创建一个「文本域控件」用于对内容值进行处理,将第一个「文本域控件」的控件名称为 KKK ,控件值为「字符串」;第二个「文本域控件」的控件名称为 AK ,控件值为「公式」,公式为:JOINARRAY(MAPARRAY(split($KKK,"\n"),INDEXOFARRAY(split(item,"-"),2)),"\n") 。如下图所示:
保存报表,点击「分页预览」即可。
5. 模板下载
已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\MultiValue\文本域控件实现多值查询-过滤条件.cpt
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\MultiValue\文本域控件实现多值查询-SQL 语句.cpt
点击可下载模板: