作者:管理员  历史版本: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对应的是表单绑定的业务对象生成的物理表表名

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