1. 为什么我们需要给表单字段“上规矩”?
大家好,我是老张,在泛微生态里摸爬滚打了十来年,做过不少OA流程和表单开发。今天想和大家聊聊一个看似基础,但实际开发中“坑”特别多的活儿:怎么给泛微E9表单里的字段设置输入规则。
你可能觉得,不就是限制一下数字范围、日期不能乱选、文件不能乱传嘛,前端写个校验不就行了?我刚开始也这么想,结果在实际项目里被业务部门“教育”了好几次。比如,一个绩效考核打分流程,要求经理给下属打1到5分。如果只做前端校验,稍微懂点技术的员工打开浏览器开发者工具,就能绕过限制提交一个“-10”或者“999”的分数,这数据进了数据库,后面的报表和统计就全乱套了。再比如,合同审批流程要求上传PDF版合同,结果有人上传了EXE可执行文件,轻则流程卡壳,重则带来安全风险。
所以,在E9里做字段控制,核心思想必须是“前后夹击,双保险”。前端脚本负责实时提醒,让用户体验更好,避免填错;后端配置和逻辑负责兜底,确保最终进入系统的数据是绝对干净、合规的。这不仅仅是技术实现,更是对业务流程严谨性的保障。接下来,我就结合自己踩过的坑和总结的经验,带你从整型、日期型到附件型,把这三种字段的精细化控制,掰开揉碎了讲清楚。
2. 整型字段:别让分数和金额“乱跑”
整数字段,比如金额、数量、评分,是最常需要限制的。E9默认的表单设计器里,你可以设置字段为“数字”类型,但这只能防止用户输入字母汉字,却管不住他输入-10000或者9999999。我们的目标是把数据框死在一个合理的业务区间内。
2.1 前端实时校验与友好提示
前端校验的关键在于即时反馈。用户一输错,马上就能看到提示,并且错误的输入会被自动清空,这体验就好多了。直接上我优化过的代码,你可以抄作业:
jQuery(document).ready(function(){
// 1. 先找到字段,强烈建议用字段名转ID,别写死ID
var scoreFieldId = WfForm.convertFieldNameToId("绩效考核分数"); // “绩效考核分数”是你的字段名
// 2. 给这个字段绑定值改变事件
WfForm.bindFieldChangeEvent(scoreFieldId, function(obj, id, value){
// 先判断是否为空,为空时不做校验
if(value === "" || value === null){
return;
}
// 将值转为数字,注意E9表单值可能是字符串
var numValue = parseFloat(value);
// 核心校验逻辑:判断是否在1-100之间
if(isNaN(numValue) || numValue < 1 || numValue > 100){
// 使用E9自带的Dialog弹窗提示,风格统一
Dialog.alert("请输入1~100之间的有效分数!");
// 关键一步:延迟清空错误输入
setTimeout(function(){
WfForm.changeFieldValue(scoreFieldId, {value: ""});
}, 500); // 延迟500毫秒,让用户能看到提示信息
} else {
// 输入正确时,可以做一些额外操作,比如自动计算总分
// console.log("分数输入正确:", numValue);
}
});
});
这段代码有几个我踩过坑才总结出的要点:
convertFieldNameToId是神器:别在代码里写死类似field12345这样的ID。表单字段ID在测试、正式环境可能不同,用字段名转换最稳妥,代码迁移时不用改。parseFl


1507

被折叠的 条评论
为什么被折叠?



