作者:管理员  历史版本:1  最后编辑:龚清  更新时间:2025-10-28 18:00
适用版本: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对应的是表单绑定的业务对象生成的物理表表名

新建一个数据模板,绑定上面配置的表单,测试添加是否有校验
