作者:管理员 历史版本:1 最后编辑:龚清 更新时间:2024-10-24 16:08
适用版本:v3.3.10+;
1. 登录系统,选择【表单管理】-【表单管理】,点击“添加/编辑”按钮,进入表单设计器,如下图:
2. 在表单设计器,选择“表单属性”下面的“表单脚本”,如下图:
脚本可以通过左上方的下拉框选择后自动填入,自动填入后只需要手动修改下“tableName”,改成表单对应的表,也就是需要做唯一校验的那张表,用英文的单引号或者双引号括起来,例如:
validationScript.validationDemoFull(‘t_tomcs’, data)。
示例脚本如下
public Void validationDemoFull(String tableName, String data) {
try {
validationDemoBefore(tableName, data);
}
catch (Exception e) {
throw new BaseException(e);
}
finally {
validationDemoAfter();
}
return null;
}
public Void validationDemoBefore(String tableName, String data) {
MapUniquePropertyValidator validator = AppUtil.getBean(MapUniquePropertyValidator.class);
ValidationContextUtil.setLocal(validator);
DefaultTable table = new DefaultTable(tableName, tableName);
Column pkProperty = new DefaultColumn("id", "id_", "主键");
Column[] uniqueProperties = new Column[1];
uniqueProperties[0] = new DefaultColumn("name", "name_", "name");
MapUniquePropertyValidation mapUniquePropertyValidation = MapUniquePropertyValidation.createMapUniquePropertyValidation(
table, pkProperty, "name", "fullName", uniqueProperties);
validator.setValidation(mapUniquePropertyValidation);
validator.setSingleUniqueValue(false);
validator.setJdbcTemplate(jdbcTemplate);
MapValidationErrors validate = validator.validate(JacksonUtil.toMap(data));
if (null != validate && validate.hasError()) {
throw new BaseException(validate.toString());
}
return null;
}
public Void validationDemoAfter() {
ValidationContextUtil.processAfterInvoke();
return null;
}
脚本写法参考 约束表单信息唯一性
脚本配置说明
前置校验脚本与后置校验脚本是互相关联的,必须同时配置或不配置。配置后,表单提交时会自动执行脚本校验,否则不执行脚本校验。
校验脚本配置后,还需要在表单脚本中插入唯一校验方法,该方法执行时会调用到校验脚本中配置的脚本,可在方法中通过返回的数据进行后续操作。
注意:
(1)脚本中存放需要校验的数据的参数名必须是“data”,不可用其他参数名。
(2)需要对返回数据进行后续操作,调用失败请对比“请求失败”,判断出异常需要return。脚本参考如下:
onValidate: function(form, callback) { this.uniqueVerify(this.$form) .then(res = > { //通过返回的数据进行后续操作 if (res === '请求出错') { callback(false) return } console.info(res) callback(true) }) . catch(() = > { callback(false) }) },
通用脚本使用说明
支持多字段校验、组合校验、独立校验;
v3.4.2+;
完整脚本
import com.lc.ibps.base.framework.table.model.Column;
import com.lc.ibps.base.db.table.model.DefaultColumn;
String tableName = "t_dsd";// 表名
String name = "dsd";//检验器名称,随便怎么写都可以,只要保证唯一即可
String fullName = "validation.dsd";//检验器完整名称,随便怎么写都可以,只要保证唯一即可
boolean isSingleUniqueValue = true;// 是组合唯一还是单字段唯一,区别:SQL使用and还是or
Column pkProperty = new DefaultColumn("id", "id_", "主键");
Column[] uniqueProperties = new Column[2];
uniqueProperties[0] = new DefaultColumn("code", "code_", "编码");
uniqueProperties[1] = new DefaultColumn("name", "name_", "名称");
validationScript.validationFull(tableName,data,name,fullName,isSingleUniqueValue,pkProperty,uniqueProperties);
前置脚本
import com.lc.ibps.base.framework.table.model.Column;
import com.lc.ibps.base.db.table.model.DefaultColumn;
String tableName = "t_dsd";// 表名
String name = "dsd";//检验器名称
String fullName = "validation.dsd";//检验器完整名称
boolean isSingleUniqueValue = true;// 是组合唯一还是单字段唯一,区别:SQL使用and还是or
Column pkProperty = new DefaultColumn("id", "id_", "主键");
Column[] uniqueProperties = new Column[2];
uniqueProperties[0] = new DefaultColumn("code", "code_", "编码");
uniqueProperties[1] = new DefaultColumn("name", "name_", "名称");
validationScript.validationBefore(tableName,data,name,fullName,isSingleUniqueValue,pkProperty,uniqueProperties);
后置脚本
validationScript.validationAfter();
示例说明
新建业务对象
对应生成的数据库表
代码中写死的校验字段对应上面生成的数据库表字段
表单管理中配置唯一校验
t_ttom
对应的是表单绑定的业务对象生成的物理表表名
新建一个数据模板,绑定上面配置的表单,测试添加是否有校验