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