参考:
校验填报页面的数据是否重复- FineReport帮助文档 - 全面的报表使用教程和学习资料
联立多字段校验是否与数据库中数据重复- FineReport帮助文档 - 全面的报表使用教程和学习资料
1、校验填报页面数据是否重复(多列)
1)在列表中添加一列用于设置该列的重复校验内容:
如添加M2列,该列的内容为公示:
CONCATENATE(C2,D2,E2,F2)
表示将C2、D2、E2 和 F2 单元格的填入的内容拼接在一起
2)在列表中添加一列用于设置整个列表的校验数据内容:
如添加B5列,该列的内容为公示:
JOINARRAY([M2],",")
表示用于获取M2扩展出的所有值作为一个字符串,以“,”分隔。
3)填报提交时,添加数据校验:
校验公示为:
len(GREPARRAY(split(B5,","),item = CONCATENATE(C2,D2,E2,F2))) <= 1
2、校验填报页面数据是否与数据库中数据重复(多列)
1)新建数据集“ds1”,查询获取数据库中已有的数据;
SELECT concat(column1, column2, column3, column4) AS 'aa' from table;
2)在列表中添加一列用于设置该列的重复校验内容:
如添加M2列,该列的内容为公示:
CONCATENATE(C2,D2,E2,F2)
表示将C2、D2、E2 和 F2 单元格的填入的内容拼接在一起
3)填报提交时,添加数据校验:
校验公示为:
IF(B2 = '' || ISNULL(B2), INARRAY(CONCATENATE(C2,D2,E2,F2), if(COUNT((ds1.group(aa))) > 1, ds1.group(aa), ARRAY(ds1.group(aa)))) = 0,true)
公示说明:
公式 | 说明 |
---|---|
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 |