Skip to content

数据校验

概述

单据并发保存校验用于规避多用户 / 多设备同时编辑同一份单据引发的数据覆盖问题。

当多个用户同时打开同一单据编辑,若其中一人先行保存,其他用户再次保存时会覆盖已有修改。

实现原理:比对单据打开时记录的更新时间(UPDATE_TIME)与数据库当前更新时间;若两者不一致,代表单据已被他人修改,阻止保存避免数据丢失。

演示页面:page_id=590

billcheck_init

初始化单据并发校验规则。

语法

js
billcheck_init(params)

参数

参数名类型必填说明
dataSourceCodestring数据源代码
tableNamestring数据表名称
columnNamestring单据主键查询字段
columnValuestring单据主键值
checkNamestring并发校验字段(一般为UPDATE_TIME

billcheck

执行单据并发校验(自主处理校验结果)。

语法

js
billcheck(params, config)

参数

参数名类型必填说明
paramsObject业务参数
configObject扩展配置参数

params 参数

参数名类型必填说明
dataSourceCodestring数据源代码
tableNamestring数据表名称
columnNamestring单据主键查询字段
columnValuestring单据主键值
checkNamestring并发校验字段
checkValuestring前端缓存的初始校验值

config 参数

参数名类型必填说明
errModenumber异常模式:1 = 抛出异常,0 = 返回 false

billcheck_hint

执行单据并发校验(内置弹窗提示)。

语法

js
billcheck_hint(params)

参数

参数名类型必填说明
dataSourceCodestring数据源代码
tableNamestring数据表名称
columnNamestring单据主键查询字段
columnValuestring单据主键值
checkNamestring并发校验字段
checkValuestring前端缓存的初始校验值

使用方式

即时校验

无需初始化,适合单据保存时单次校验。

billcheck_hint

自动弹窗提示,校验冲突时阻断后续代码执行。

js
var params = {
    dataSourceCode: "Bus",
    tableName: "USER_DEMO",
    columnName: "ID",
    columnValue: "-10",
    checkName: "UPDATE_TIME",
    checkValue: info_data.UPDATE_TIME
};
// 校验失败自动弹出提示,中断后续逻辑
billcheck_hint(params);
// 执行单据保存逻辑

billcheck

返回布尔结果,开发者自定义提示与业务逻辑。

js
var params = {
    dataSourceCode: "Bus",
    tableName: "USER_DEMO",
    columnName: "ID",
    columnValue: "-10",
    checkName: "UPDATE_TIME",
    checkValue: info_data.UPDATE_TIME
};
var status = billcheck(params);
if (status) {
    // 校验通过,执行保存
    saveDocument();
} else {
    openAlert("单据已被其他用户修改,请刷新后重新编辑");
}

预初始化校验

支持批量单据校验,适合页面加载时预先注册多条单据校验规则,统一批量检查。

billcheck_init

预先注册单据校验规则,支持多次调用注册多个单据。

js
function order_init() {
    var params = {
        dataSourceCode: "Bus",
        tableName: "USER_DEMO",
        columnName: "ID",
        columnValue: "-10",
        checkName: "UPDATE_TIME"
    };
    billcheck_init(params);
}

billcheck(初始化后无参调用)

检查所有已初始化的单据规则。

js
function order_check() {
    var status = billcheck();
    if (status) {
        saveDocument();
    } else {
        openAlert("部分单据已被其他用户修改,请刷新后重新编辑");
    }
}

billcheck_hint(初始化后无参调用)

批量校验并使用系统内置弹窗提示。

js
function order_check_hint() {
    billcheck_hint();
    // 校验通过后执行保存
    saveDocument();
}

注意事项

  1. 常规业务场景推荐使用 UPDATE_TIME 作为 checkName
  2. 即时校验模式需要传入 checkValue(页面打开时获取的初始时间戳);
  3. 预初始化模式支持批量注册多条单据,统一执行校验;
  4. billcheck_hint 冲突时会直接阻断代码,适合最简保存场景;
  5. billcheck 返回布尔值,灵活性更高,适合自定义交互逻辑。

基于 MIT 许可发布