最新历史版本 :文本域控件实现多值查询 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本
功能变更
11.0-

1.2 应用场景

当用户需要对表中的同一字段实现多值查询时,可以使用文本域控件。

当文本域控件内容为空时,查询全部数据;有多个订单 ID 时,查询结果为多个订单 ID 的信息。如下图所示:

动图3.gif

1.3 实现思路

用户可通过两种方法实现文本域控件多值查询。

示例一:添加模板参数,单元格设置过滤条件实现。

示例二:使用数据集参数在数据查询的时候即可实现过滤。

2. 示例一:模板参数实现编辑

2.1 新建模板

新建一张普通报表。如下图所示:

新建普通报表.jpg

2.2 准备数据

新建数据库查询 ds1,SQL 语句为:SELECT * FROM 订单。如下图所示:

1.png

2.3 设计报表

A1-G1 单元格输入文本内容,A2-G2 单元格拖入相应的数据列,自行设计报表样式。如下图所示:

4.png

2.4 添加模板参数

点击菜单栏「模板>模板参数」,添加一个模板参数order。如下图所示:

6.png

2.5 参数绑定控件

1)进入参数面板编辑界面,点击右侧的「全部添加」,即可将参数添加至参数面板。如下图所示:

动图2.gif

2)参数绑定文本域控件。如下图所示:

7.png

3)调整文本域控件的大小及「查询」按钮的位置。如下图所示:

8.png

2.6 添加过滤条件

1)双击 A2 单元格,点击「过滤」,类型选择「公式」。

2)点击「定义」,输入公式:IF(LEN($order)==0,INARRAY($$$,Split($order, "\n"))=0,INARRAY($$$,Split($order, "\n"))>0),点击「增加」和「确认」。如下图所示:

注:公式表示如果文本域内容为空,则查询全部数据;否则,将文本域里的文字,按照换行符进行分割,每行为一个查询值,并匹配当前单元格内容是否为文本域控件中输入的其中一个值。

9.png

2.7 设置隔行变色

1)选中 A2 单元格,点击右侧的「条件属性」,添加一个条件属性。

2)属性选择「背景」,颜色选择紫色,设置为「当前行」。

3)类型选择「公式」,点击「定义」。输入公式: row() % 2 = 0,点击「增加」。如下图所示:

10.png

3. 示例二:数据集参数实现编辑

3.1 新建模板

同 2.1 节,此处不再赘述。

3.2 准备数据

新建数据库查询 ds1 ,输入SQL 语句:SELECT * FROM 订单 where 1=1  ${if(len(order)>0," and 订单id in ('" +replace(order, "\n","','")+ "')","")}如下图所示:

注:SQL 语句首先判断文本域控件是否有内容,有内容时,通过 in 查询文本域控件中以换行输入的订单 ID 的数据,并使数据在数据集中过滤;无内容时,则不添加过滤条件,查询全部数据。

11.png

3.3 设计报表

A1-G1 单元格输入文本内容,A2-G2 单元格拖入相应的数据列,自行设计报表样式。如下图所示:

12.png

3.4 参数绑定控件

同 2.5 节,此处不再赘述。

3.5 设置隔行变色

同 2.7 节,此处不再赘述。

4. 效果预览编辑

1)PC端

PC端效果如 1.2 节所示。

2)移动端

移动端效果如下图所示:

手机视频动图.gif

5. 下载模板编辑

点击下载示例一模板:示例一模板参数实现.cpt

点击下载示例二模板:示例二数据集参数实现.cpt

6. 注意事项编辑

问题描述

有时用户输入的文本中含有多余内容,此时直接查询将会无法显示数据。

解决方案

若用户输入的文本中含有多余内容,则需要排除掉多余内容,只留下有效内容:订单ID。如下图所示:

具体步骤如下所示:

1)在参数面板再次添加一个文本域控件,控件名称为KKK,控件值为字符串。如下所示:

14.png

2)原来的文本域控件order ,控件值设置为「公式」,输入公式:JOINARRAY(MAPARRAY(split($KKK,"\n"),INDEXOFARRAY(split(item,"-"),2)),"\n") 。如下图所示:

15.png