明细表的数据重复提示 致远表单自带有明细表公式 可以直接进行校验以及提示 如下图
点击表单的校验规则 在弹出窗口中点击公式框 打开公式选择配置界面
选择右侧的更多公式 然后选择要校验的明细表字段 再点击公式名称【明细表列不重】 依次点击确认即可。
返回到校验规则窗口 在提示框中输入要提示的信息 再次点击确定。
明细表的数据重复提示校验就OK了。
操作实现步骤如下
2.1、设计表单表单设计样式如下
其中重复数据即为显示明细表中重复的数据内容
使用自定义函数 编写重复数据判断规则 公式代码如下
def haveRepetArray param[0];
def findRepetition [:]; //找到重复的 重复的map值大于1 不重复的值等于1
def repetitionRes []; //重复的结果
def noRepetitionRes []; //不重复的结果
def arrElemIndex []; //得到重复元素的下标
def mapElemIndex [:]; //通过键值的方式存储重复元素
haveRepetArray.each{a-
if(findRepetition[a] null){ //如果这个map里没有这个键的时候就给值1
findRepetition[a] 1
} else{
findRepetition[a] findRepetition[a] 1
findRepetition.each{m-
if (m.value 1) { //遍历如果这个map键的值大于1说明就是重复的把它放在一个数组里
repetitionRes m.key
}else{ //如果不是重复的把它放在另一个数组里
noRepetitionRes m.key
repetitionRes.each{entry - //遍历重复的数组
def tempArr [];
haveRepetArray.eachWithIndex {r,j - //遍历原始数组
if (entry r) { //如果重复数组里的值等于原始数组里的值 就把这个元素的索引放到一个新数组里
tempArr j //只取原始数组的索引
mapElemIndex[entry] tempArr //以键值对的方式存储数组
arrElemIndex tempArr //添加到一个新数组
def endRes mapElemIndex.toString();
endRes endRes.substring(1,endRes.length()-1).replace( ], , ]n );
return endRes.equals( : )? :endRes;
通过应用设计师打开表单 并进入表单编辑状态 选中【重复数据】字段 并点击右侧的计算公式 注意 【重复数据】字段类型为文本域 字段长度建议根据情况设置高一点 毕竟可能是要整合明细表的多行内容。 在打开的计算公式设置窗口中 找到自定义函数 打开并新建 如下图
如上图步骤设置好自定义函数后 依次点击保存、确定等操作。最后再保存表单编辑状态 关闭表单编辑。
由于系统的安全机制 在定义好自定义函数后 需要使用system账号审核一下 菜单位置在 【安全管理】-【安全审计】-【CAP自定义函数审核】 找到刚刚新建的自定义函数 选中后 点击审核并通过确定即可。
3、效果确认完成以上操作后 打开刚做的流程表单 然后输入相关内容 进行数据测试。
如果表单设计的有业务关系 这里不影响计算结果 如下图
1、自定义函数脚本使用groovy语言 与java类似 而且可以直接引用软件环境中的类 包名.类名
2、基于表单定义的自定义函数 只能用此于表单 在别的表单也要引用时 需要重新定义自定义函数 同时也需要后台重新审核
3、V8.0版本开始 表单中引入了公式组件 可以通过公式组件定义通用函数 再直接引用。公式组件通过单位管理员 默认为admin1 进行后台定义 同样也是使用groovy脚本语言。
如果各位有兴趣或者其他问题 可以深入交流 共同学习。
【记录于2021年9月27日】



