需求:流程表单重复提交校验

前言

基于致远的OA产品,CAP业务定制平台模块设计解决实际业务需求的记录。

需求来源

QQ群友

需求说明

A8 应用设计里面的表单 可以校验不能重复提交吗?
一个人 当月只能提交一次

解决思路

不可重复提交的前提是,在本次提交时,首先获取之前提交的历史数据标识,并通过表单的校验规则,对获取的标识进行判断。

实施方案

方案一:流程生成底表,再关联底表标识

步骤①

新建流程表,并根据不可重复规则要求定义出标识字段;
如上面需求中,可定义 {提交人} 选人控件、{提交日期} 日期控件;

增加辅助字段 {提交年度} 数字控件、{提交月份} 数字控件;
设置计算公式:
{提交年度}=year({提交日期})
{提交月份}=month({提交日期})

增加判断字段 {是否重复提交} 文本控件;
设置校验规则:
公式为: {是否重复提交} =null
提示为:本月已经提交数据,请不要重复提交!
流程表校验规则设置

表单样式如下:
流程表表单样式

步骤②

新建关联底表,底表字段包含关键字段 {提交人}{提交日期}{提交年度}{提交月份}{是否重复提交},其他字段根据实际自行设置;表单样式如下:
底表表单样式

其中 {是否重复提交} 设置计算公式为 ‘已有相同数据’ ;
其他字段如 {提交人}{提交日期}{提交年度}{提交月份} 由流程表结束后,触发新建底表时传入数据值;

步骤③

设置业务关联关系;
流程表结束后新建底表业务关系如下:
新建触发:流程表新建底表业务关系

流程表打开自动关联底表业务关系如下:
新建关联:流程表关联底表业务关系

步骤④

结果验证
本月第一次新发起流程表:
本月第一次新发起流程表
正常提交发送。

本月相同人员再次发起流程表:
本月相同人员再次发起流程表
{是否重复提交} 字段框中显示"已有相同数据",并在提交时系统提示校验结果:
提交校验结果
满足需求!

方案二:使用groovy自定义函数

步骤①

新建流程表单,设置关键字段 {提交人} 选人控件、 {提交日期} 日期控件;
并增加判断字段 {是否已有数据} 文本控件;
设置校验规则:
公式为:{是否已有数据} = null
提示为:本月已提交数据,请不要重复提交!
groovy流程表单校验规则设置

表单样式如下: 使用groovy函数控制重复提交流程表样式

步骤②

查看新设计表单的数据字典,并编写SQL查询语句
查看流程表的数据字典
数据字典内容
根据要求,如果通过查询语句能够找到记录,说明已经提交过数据,如果没有记录,则说明没有提交过数据。

select id from formmain_0072 
	where field0001 in 
			(select id from org_member where name=${提交人}) 
	and year(field0002)=year(${提交日期}) 
	and month(field0002)=month(${提交日期})
步骤③

打开表单,设置字段 {是否已有数据} 的计算公式,编写groovy自定义函数; 自定义函数设置
代码如下:

def member = param[0];
def date = param[1];
def sqljdbc = "jdbc:mysql://IP:port/yourDatabase?useUnicode=true&characterEncoding=UTF-8";
def sqluser = "yourUser";
def sqlpwd = "yourPassword";
def sqldriver = "com.mysql.jdbc.Driver";
def sqlStr = """select id from formmain_0072 where field0001 in (select id from org_member where name=${member}) and year(field0002)=year(${date}) and month(field0002)=month(${date})""";
def findResult = groovy.sql.Sql.newInstance(sqljdbc,sqluser,sqlpwd,sqldriver).withCloseable {sql -> return sql.firstRow(sqlStr)};
return findResult?'已有数据':'';

其中sqljdbc、sqluser、sqlpwd、sqldriver改成对应连接数据库的信息即可;
另外,对于MySQL8版本,需要在sqljdbc中增加一些参数(useSSL=false&allowPublicKeyRetrieval=true),虽然不影响使用,但会有错误信息持续输出到日志文件中;

def member = param[0];
def date = param[1];
def sqljdbc = "jdbc:mysql://192.168.56.149:3306/obxoa?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true";
def sqluser = "root";
def sqlpwd = "123456789";
def sqldriver = "com.mysql.jdbc.Driver";
def sqlStr = """select id from formmain_0072 where field0001 in (select id from org_member where name=${member}) and year(field0002)=year(${date}) and month(field0002)=month(${date})""";
def findResult = groovy.sql.Sql.newInstance(sqljdbc,sqluser,sqlpwd,sqldriver).withCloseable {sql -> return sql.firstRow(sqlStr)};
return findResult?'已有数据':'';
步骤④

结果验证
本月第一次发起流程表单:
本月第一次发起流程表单
正常提交发送。

本月相同人员再次发起流程表单:
本月相同人员再次发起流程表单
{是否已有数据} 字段框中显示"已有数据",并在提交时系统提示校验结果:
提交校验结果
满足需求!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值