1. 概述编辑
1.1 预期效果
当文本域参数值为多个时,如何设置报表的过滤条件呢?如下图所示,当文本域参数有多个订单 ID 时,查询结果为多个订单ID 的信息。
案例1:(控件内容)
案例2:(控件内容-转换-标准格式)
1.2 实现思路
采用报表的过滤功能设置过滤条件,或通过 SQL 语句过滤。
2. 示例1-过滤条件过滤编辑
2.1 设计报表
1)新增模板,新增数据集 ds1,SQL 语句为:SELECT * FROM [订单]
2)将数据集 ds1 的字段拽入报表单元格中,设计表格样式。如下图所示:
2.2 添加文本域控件
在参数面板中,添加「文本域控件」和「查询按钮」,「文本域控件」控件名称为 AK,如下图所示:
2.3 添加过滤
在 A2 单元格设置过滤条件,选择公式,公式内容为:INARRAY($$$, split($AK, "\n")) > 0。如下图所示:
公式作用为匹配当前单元格内容是否为文本域控件中输入的其中一个值。
2.4 效果预览
保存模板后,点击「分页预览」,在「文本域控件」中输入订单 ID,PC 端效果如下图所示:
App 及 HTML5 效果如下图所示:
3. 示例-数据集过滤编辑
1)参考 2.1 节设计报表样式。
2)参考 2.2 节添加「文本域控件」和「查询按钮」。
3)修改 ds1 数据中 SQL语句,使得数据在数据集中过滤。
SQL 语句为:SELECT * FROM [订单] where 1=1 ${if(len(AK)>0," and 订单id in ('" +replace(AK, "\n","','")+ "')","")}
SQL 语句通过 in 查询文本域控件中以换行输入的订单 ID 的数据。
4)保存报表后,预览效果如 2.4 节所示。
4. 示例2编辑
需求:有时,用户默认文本内容含有多余内容,需要对内容值进行处理,提取部分内容进行数据过滤查询。
4.1 在参数区创建二个文本域组件,分别命名为:KKK和AK
4.2 选中控件AK,控件值-公式,输入:JOINARRAY(MAPARRAY(split($KKK,"\n"),INDEXOFARRAY(split(item,"-"),2)),"\n")
注:公式视实际情况,可根据内容提取需求自行扩展
4.3 通过公式转换,当你在控件KKK输入原文本后,控件AK会自动获取到转换后的值,再根据控件AK的值,进行数据过滤删选即可。
4.4 数据删选过滤方法(略),参考(示例1)。
5. 模板下载编辑
已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\MultiValue\文本域控件实现多值查询-过滤条件.cpt
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\MultiValue\文本域控件实现多值查询-数据集.cpt
点击可下载模板:
文本域控件实现多值查询(控件转换).cpt (注此模板仅包含控件转换内容)