Appearance
数据校验
概述
单据并发保存校验用于规避多用户 / 多设备同时编辑同一份单据引发的数据覆盖问题。
当多个用户同时打开同一单据编辑,若其中一人先行保存,其他用户再次保存时会覆盖已有修改。
实现原理:比对单据打开时记录的更新时间(UPDATE_TIME)与数据库当前更新时间;若两者不一致,代表单据已被他人修改,阻止保存避免数据丢失。
演示页面:page_id=590
billcheck_init
初始化单据并发校验规则。
语法
js
billcheck_init(params)参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| dataSourceCode | string | 是 | 数据源代码 |
| tableName | string | 是 | 数据表名称 |
| columnName | string | 是 | 单据主键查询字段 |
| columnValue | string | 是 | 单据主键值 |
| checkName | string | 是 | 并发校验字段(一般为UPDATE_TIME) |
billcheck
执行单据并发校验(自主处理校验结果)。
语法
js
billcheck(params, config)参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| params | Object | 是 | 业务参数 |
| config | Object | 否 | 扩展配置参数 |
params 参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| dataSourceCode | string | 是 | 数据源代码 |
| tableName | string | 是 | 数据表名称 |
| columnName | string | 是 | 单据主键查询字段 |
| columnValue | string | 是 | 单据主键值 |
| checkName | string | 是 | 并发校验字段 |
| checkValue | string | 否 | 前端缓存的初始校验值 |
config 参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| errMode | number | 否 | 异常模式:1 = 抛出异常,0 = 返回 false |
billcheck_hint
执行单据并发校验(内置弹窗提示)。
语法
js
billcheck_hint(params)参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| dataSourceCode | string | 是 | 数据源代码 |
| tableName | string | 是 | 数据表名称 |
| columnName | string | 是 | 单据主键查询字段 |
| columnValue | string | 是 | 单据主键值 |
| checkName | string | 是 | 并发校验字段 |
| checkValue | string | 否 | 前端缓存的初始校验值 |
使用方式
即时校验
无需初始化,适合单据保存时单次校验。
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();
}注意事项
- 常规业务场景推荐使用
UPDATE_TIME作为checkName; - 即时校验模式需要传入
checkValue(页面打开时获取的初始时间戳); - 预初始化模式支持批量注册多条单据,统一执行校验;
billcheck_hint冲突时会直接阻断代码,适合最简保存场景;billcheck返回布尔值,灵活性更高,适合自定义交互逻辑。