1. 概述编辑
1.1 预期效果
当用户相对表中的同一字段实现多值查询时,可以使用文本域控件。如下图所示,当文本域参数有多个订单 ID 时,查询结果为多个订单 ID 的信息,如下图所示:
1.2 实现思路
用户可通过两种方法实现文本域控件多值查询,采用报表的过滤功能设置过滤条件,或通过 SQL 语句过滤。
2. 示例:过滤条件过滤编辑
2.1 设计报表
1)新建普通报表,选择「数据集查询」,新增数据集 ds1,SQL 语句为:SELECT * FROM [订单]
2)将数据集 ds1 的字段拽入报表单元格中,设计表格样式。如下图所示:
3)选中表格中的第2行,点击「条件属性」点击「+」,属性选择「背景」,颜色选择紫色,类型选择「公式」,公式为 row() % 2 = 0,点击「增加」。如下图所示:
2.2 添加文本域控件
在参数面板中,添加「文本域控件」和「查询按钮」,将「文本域控件」控件名称设置为 AK ,如下图所示:
2.3 添加过滤
在 A2 单元格设置过滤条件,点击「过滤」,类型选择「公式」,公式内容为:INARRAY($$$, split($AK, "\n")) > 0,点击「增加」和「确认」。公式的作用为匹配当前单元格内容是否为文本域控件中输入的其中一个值。如下图所示:
2.4 效果预览
1)保存模板后,点击「分页预览」,在「文本域控件」中输入订单 ID ,PC 端效果如下图所示:
2)App 端及 HTML5 端效果如下图所示:
3. 示例:SQL 语句过滤编辑
3.1 新建数据集
1)新建普通报表,选择「数据集查询」,新建数据集 ds1 ,SQL 语句通过 in 查询文本域控件中以换行输入的订单 ID 的数据,并使数据在数据集中过滤。SQL 语句为:SELECT * FROM [订单] where 1=1 ${if(len(AK)>0," and 订单id in ('" +replace(AK, "\n","','")+ "')","")},如下图所示:
3.2 设计报表
参考2.1 节设计报表样式。点击「参数面板」,选择「全部添加」,删除「标签控件」,保留「文本域控件」和「查询按钮」。如下图所示:
3.3 效果预览
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\文本域控件实现多值查询-数据集.cpt
点击可下载模板: