BeanShell
四种功能:
- 列值唯一 - 某些列不允许重复
- 列值非空 - 某些列不允许为空
- 列值相等 - 某些列必须都相同
- 列值与字段值相等 - 某些列必须与主表某个字段值一致
使用方法
- 设置需要的功能值,即填写校验的字段名,例如:
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(); |
使用样例
样例应用
APP_code_demo-1-20190523101856.jwa
分步指南
相关的文章