Previous topicNext topic
WebBuilderX > 子页面组件元素 > 表单类元素 > 验证规则 >
多表验证示例

上个示例,用到的是同一个表里的多个值参与验证。

实际应用中,还会出现一种多表联合验证的情况。例如,某系统后台数据库有两个数据表“预算”和“支出”。其中,“预算”表结构如下:

“支出”表结构如下:

现在要建立一个表单,并在表单中用到“科目”、“支出”和“日期”3个输入框,以便输入数据,向“支出”表添加数据行。输入数据时,需要对“支出”的输入数值进行验证,只要“支出”表里的当前科目支出累计值没有超过“预算”表里的相同科目预算值,就属于正常,数据可以添加;否则输入数据无效,并给出“超出预算”的类似提示。这就属于多表数据的调用验证。以下是示例代码:

function(value,item){
       let km = $(item).closest('form').find('input[name=科目]').val(); //得到表单里的科目输入值
       let ys = "(select 预算 from 预算 where 科目='" + km + "')";       //获取预算值
       let zc = "(select sum(支出) from 支出 where 科目='" + km + "')";  //获取支出汇总值
       //远程验证
       let msg;
       $.ajax({
            url:'query',
            type:'post',
            dataType:'json',
            async:false,
            data:{
                dtsource:'{{test|支出}}',
                tj:Number(value) + '>' + ys + '-' + zc    //此为验证条件
            },
            success:function(res){  //根据服务器返回值进行判断,如果返回值不为0,表示验证条件成立
                if(res.count) msg = '输入的数据已经超过额度预算!'
            }
        });
        if(msg) return msg;
    }

上述代码的关键在于验证条件。此条件如果用文字表述的话,意思就是:

输入值 > 预算总额 - 支出总额

如果此条件成立,就表示输入值已经超过了余下的可使用预算额度,那么返回的count值肯定不会为0,验证没有通过;否则验证通过。