1 概述
1.1 版本
| 服务器版本 |
|---|
| v7.3.0及之后版本 |
1.2 业务背景
在综合勤务系统的勤务排班模块中,我们需要实现一个排班管理功能,如下图:
核心要求就是在F5单元格的下拉框中选择人员时,需要实时校验该人员是否已在同一时间段内被排班,避免重复排班。
2 解决方案
2.1 两种校验方式
1、后台校验
保存时触发,使用系统内置的校验函数
2、前台校验
选择时立即触发,通过API调用数据集。
2.2 后台校验实现方案
后台校验的核心是使用系统提供的 validfielddata 函数:
该函数的基本语法:validfielddata(数据集名称, 校验字段, 筛选条件)
步骤一:打开单元格填报属性
1、选中需要校验的单元格(如F5)
2、右键选择「填报属性」
3、切换到「后台校验」选项卡
步骤二:添加校验规则
1、点击「增加」按钮添加新规则
2、在「条件」列输入校验表达式:
// 示例:校验排班人员是否重复
if(
validfielddata(
'排班数据', // 数据集名称
'owner_names', // 校验字段(人员姓名字段)
'id_police_station==@派出所 and ' +
'id_station==D5 and ' + // D5为站点单元格
'start_date==F3 and ' + // F3为开始日期
'owner_names==B5' // B5为选择的人员
),
false, // 如果存在则返回false(校验失败)
true // 如果不存在则返回true(校验通过)
)3、在「错误提示信息」列输入:该人员在此时间段已被排班,请选择其他人员。
2.3 前台校验实现方案
前台校验通过调用数据集接口实时验证数据,其工作原理:
1、触发时机:下拉框值改变时立即触发
2、数据获取:调用 api/lcReport/dataset/bycolumn接口
3、条件过滤:通过参数传递过滤条件
4、结果判断:检查选择的值是否在返回的数据集中
步骤一:打开单元格填报属性
1、选中需要校验的单元格(如F5)
2、右键选择「填报属性」
3、切换到「前台校验」选项卡
步骤二:设置校验规则
1、设置方式选择「JavaScript脚本」
2、勾选「值改变后立即校验」
3、参数配置:
| 参数名 | 参数值类型 | 参数值 | 说明 |
|---|---|---|---|
| t1 | 公式 | F3 | 获取当前选择的日期 |
| datas | 公式 | dataset(‘排班数据’,’id,owner_names,start_date,id_station’) | 获取排班数据集 |
其中,dataset 函数是获取数据集数据的,用于获取校验数据源。
4、JavaScript脚本示例:
function(t1, datas) {
// 获取当前选择的人员(假设从当前单元格获取)
var selectedPerson = this.getValue();
if(!datas || !selectedPerson) {
return "数据异常,请检查";
}
// 将数据集字符串转换为数组对象
var scheduleList = generateArrayObjectDynamic(datas);
// 获取当前排班的上下文信息
var currentStation = getCellValue('D5'); // 当前站点
var currentDate = t1; // 当前日期
// 筛选条件:同一站点、同一日期、且人员已排班
var conflictRecords = scheduleList.filter(function(item) {
return item['id_station'] == currentStation &&
item['start_date'] == currentDate &&
item['owner_names'] == selectedPerson;
});
// 如果找到冲突记录
if(conflictRecords.length > 0) {
return "错误:人员 " + selectedPerson + " 在 " + currentDate + " 已为站点 " + currentStation + " 排班";
}
// 校验通过
return true;
}3 总结
推荐使用前后台双重校验,既能保证系统的易用性,又能去报数据的准确性,特别适合需要严格避免数据冲突的业务场景。
1、前台校验(实时反馈)
- 优点:即时反馈,用户体验好
- 实现:在下拉框的 onChange事件中调用校验
2、后台校验(最终保障)
- 优点:防止绕过前台的提交,数据最终一致性保障
- 实现:在保存按钮的提交事件中进行最终校验
作者:fancy 创建时间:2025-12-18 10:30
最后编辑:fancy 更新时间:2026-01-10 17:30
最后编辑:fancy 更新时间:2026-01-10 17:30
扫码关注网盛数新公众号,获取更多帮助资料