历史版本13 :联立多字段校验是否与数据库中数据重复 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题描述

用户在填报报表中录入数据时,希望可以通过两个或多个字段来验证数据的唯一性,确保填入的数据在数据库中不存在。

1.2 解决思路

报表设计时将需要校验的多个字段拼接起来作为一个字段,然后对数据库中的相应字段也做同样拼接处理。填报属性中设置内置提交校验公式,验证这两个拼接起来的字段是否一致,如果一致则代表数据重复。

2. 示例编辑

以下示例用产品名称和单价作为联合主键,来判断输入值是否和数据库中已有数据重复。

2.1 数据准备

新建数据集 ds1,输入 SQL 查询语句:select *,(产品名称||单价) as aa from S产品

(产品名称||单价)表示将产品名称与单价拼接成一个字段。该语法适用于Sqlite数据库,其它数据库的拼接语法可百度查询。

1573437882210985.png

2.2 设计模板

1)如下图设计表格,A2~G2 单元格添加文本控件。

H2 单元格插入公式:CONCATENATE(B2, C2),表示在填报时将 B2 和 C2 单元格的填入的内容拼接在一起。

Snag_10b6648.png

2)为了前端填报时可以添加多条记录,需要设置 A2 单元格纵向扩展,如下图所示:

Snag_10e8432.png

3)前端添加多条记录时,需要新增的行保留 H2 单元格中的公式,所以要将 H2 单元格的插入行策略设置为原值,如下图所示:

Snag_1108a24.png

4)H2 单元格仅用于判断重复数据,不需要展示,所以设置完成后可以隐藏 H 列。

Snag_11221bc.png

2.3 填报属性设置

点击模板>报表填报属性>提交」,添加一个内置SQL,按下图所示设置填报属性

Snag_5b2b4b.png

点击模板>报表填报属性>数据校验」,添加一个内置校验,按下图所示设置校验公式:

公式为:INARRAY(H2,ds1.group(aa))=0,含义为取出ds1中拼接好的aa字段作为一个数组,之后遍历判断每一行的H2是否在数组中存在,存在的话就是重复数据。

Snag_1f44df1.png

2.4 效果查看

1)PC 端

保存报表,点击填报预览,输入与数据库中重复的产品名称和单价,数据校验时会提示报错信息。

FFC31667-8943-4800-A2C1-32A9ABDB473E.GIF

2)移动端

同时支持 App 端和 H5 端,效果如下图所示:
34DCA01D-746E-407E-9BF2-4FA42600B354.GIF

3. 已完成模板编辑

已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Form\VerifyForm\内置提交校验验证数据是否重复.cpt

点击下载模板:内置提交校验验证数据是否重复.cpt