BeanShell

四种功能:

  1.  列值唯一 - 某些列不允许重复
  2.  列值非空 - 某些列不允许为空
  3.  列值相等 - 某些列必须都相同
  4.  列值与字段值相等 - 某些列必须与主表某个字段值一致

使用方法

  • 设置需要的功能值,即填写校验的字段名,例如:
    String[] uniqueCols={"f1"}; //只校验f1一列
    String[] uniqueCols={"f1","f2"};//校验f1和f2两列
    String[] uniqueCols={};//不做唯一性校验
  • 删除不需要的提示列(不删除不能正确提示):


import org.joget.apps.form.model.Element;
import org.joget.apps.form.model.Form;
import org.joget.apps.form.model.FormData;
import org.joget.apps.form.model.FormRow;
import org.joget.apps.form.model.FormRowSet;
import org.joget.apps.form.service.FormUtil;
  
public boolean validate(Element element, FormRowSet rows, FormData formData) {
    String[] uniqueCols={"f1","f2"};//列值唯一
    String[] notEmptyCols={"f1","f2"};//列值非空
    String[] equalCols={"f1","f2"};//列值相等
    String[] equalToCols={"f1|field5","f2|field6"};//列值与字段值相等

    HashMap names=new HashMap();//提示信息设置
    names.put("f1","列1");
    names.put("f2","列2");
    names.put("field5","姓名");
    names.put("field6","年龄");


    boolean result = true;
    String id = FormUtil.getElementParameterName(element);
    Form form = FormUtil.findRootForm(element);
    HashMap uniqueColsMap=new HashMap();//uniqueCols统计容器{column:{v:index}}
    HashMap equalColsMap=new HashMap();//equalCols统计容器{column:v}
    if (rows != null && !rows.isEmpty()) {
        for(int i=0;i<rows.size();i++){
            FormRow row=rows.get(i);

            for(String uc:uniqueCols ){
                HashMap vi=null;
                if(uniqueColsMap.containsKey(uc)){
                    vi=(HashMap)uniqueColsMap.get(uc);
                }else{
                    vi=new HashMap();
                    uniqueColsMap.put(uc,vi);
                }
                String columnValue = row.getProperty(uc);
                if(vi.containsKey(columnValue)){
                    int rowIndex = (Integer)vi.get(columnValue);
                    String error="'"+names.get(uc)+"'在第"+(rowIndex+1)+"行与第"+(i+1)+"行的值要唯一";
                    formData.addFormError(id, error);
                    return false;
                }
                vi.put(columnValue,i);
            }

            for(String nec:notEmptyCols){
                String columnValue = row.getProperty(nec);
                if(columnValue==null||columnValue.trim().equals("")){
                    String error="'"+names.get(nec)+"'在第"+(i+1)+"行的值要非空";
                    formData.addFormError(id, error);
                    return false;
                }
            }

            for(String ec:equalCols){
                String columnValue = row.getProperty(ec);
                if(equalColsMap.containsKey(ec)){
                    String v=(String)equalColsMap.get(ec);
                    if(!v.equals(columnValue)){
                        String error="'"+names.get(ec)+"'在第"+(i+1)+"行的值和其它行的值要一样";
                        formData.addFormError(id, error);
                        return false;
                    }
                }else{
                    equalColsMap.put(ec,columnValue);
                }
            }

            for(String etc:equalToCols){
                String[] split = etc.split("\\|");
                if(split.length!=2){
                    continue;
                }
                String columnValue=row.getProperty(split[0]);
                Element field = FormUtil.findElement(split[1], form, formData);

                String compareValue = FormUtil.getElementPropertyValue(field, formData);
                if(!columnValue.equals(compareValue)){
                    String error="'"+names.get(split[0])+"'在第"+(i+1)+"行的值和'"+names.get(split[1])+"'的值要一样";
                    formData.addFormError(id, error);
                    return false;
                }
            }
        }
    }
    return result;
}
return validate(element, rows, formData);

配置项

配置项类型说明样例
uniqueCols
字符串数组|空数组
需要验证唯一性的列
String[] uniqueCols={"f1","f2"};
notEmptyCols
字符串数组|空数组
需要验证非空的列
String[] notEmptyCols={"f1","f2"};
equalCols
字符串数组|空数组
需要验证所有值相等的列
String[] equalCols={"f1","f2"};
equalToCols
字符串数组|空数组
需要验证所有值与某字段相等的列

注意以"|"分隔列名和对应字段名

String[] equalToCols={"f1-field5","f2-field6"};
names
哈希表

当进行错误提示时,列名和字段名对应的显示名称

注意需要保证每个被验证的列名或字段名都在哈希表内

HashMap names=new HashMap();
names.put("f1","列1");
names.put("f2","列2");
names.put("field5","姓名");
names.put("field6","年龄");

使用样例

样例应用

APP_code_demo-1-20190523101856.jwa

分步指南

 

相关的文章