反馈已提交

网络繁忙

当前为10.0版本文档,只有最新版本的文档支持在线编辑修改,如果想创建/编辑文档,请移步至 最新版帮助文档

联立多字段校验是否与数据库中数据重复

  • 文档创建者:李白9
  • 历史版本:13
  • 最近更新:RosieY 于 2021-11-18
  • 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,if(COUNT((ds1.group(aa)))>1,ds1.group(aa),ARRAY(ds1.group(aa))))=0,含义为取出 ds1 中拼接好的aa 字段作为一个数组,之后遍历判断每一行的 H2 是否在数组中存在,存在的话就是重复数据。

    公式解释:

    公式说明
    ds1.group(aa)对 ds1 中的 aa 数据列数据分类汇总,当个数为 1 的时候,返回值为字符串;>1 返回数组
    ARRAY(ds1.group(aa))将 ds1.group(aa) 汇总的数据转换为数组格式
    if(COUNT((ds1.group(aa)))>1,ds1.group(aa),ARRAY(ds1.group(aa)))如果汇总后数据个数<1,将字符串转换为数组
    INARRAY(H2,if(COUNT((ds1.group(aa)))>1,ds1.group(aa),ARRAY(ds1.group(aa))))返回 H2 中拼接的联合主键在已有数据数组中的位置,如果不存在返回 0

    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

    附件列表


    主题: 填报应用
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    请前往「服务平台」,选择「在线支持」

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526