案例背景
建模数据台账中的数据不允许多人同时编辑,当第一个人在编辑卡片时即锁定,当保存后即解除锁定状态后第二人才能编辑。
建模数据卡片中的数据不允许多人同时编辑,若A正在编辑中,B也点击了编辑按钮,则会给出提示信息并刷新页面。
技术实现方案
1. 在表单中新增字段【当前编辑人】,并将字段添加到编辑布局中
2. 设置【编辑】按钮
当A点击编辑按钮时,通过添加DML动作更新这条数据【当前编辑人】的字段信息为A。
--以MSSQL为例
update uf_khhttz set dqbjr='$UserId$' where id='{?id}' and (dqbjr='' or dqbjr is null)
3. 设置【保存(编辑保存)】按钮
当A编辑完成点击【保存】时,通过添加DML动作清空这条数据【当前编辑人】的字段信息(操作同上)。
--以MSSQL为例
update uf_khhttz set dqbjr='' where id='{?id}'
4. 调整编辑布局
在编辑布局中添加JS代码块,实现打开布局时的校验与提醒。
在页面加载完成后,设置一个定时器,检查【当前编辑人】表单字段的值是否与当前的用户ID匹配。如果不匹配会弹出一个警告框提示用户该表单正在被其他人编辑,并且已被锁定。如果用户确认或取消,页面会返回上一页。
jQuery().ready(function(){
setTimeout(function() {
let a = JSON.parse(localstorage.getItem("theme-account"))
let userid = a.userid;
var dqbjr_fieldid = ModeForm.convertFieldNameToId("dqbjr");
var bjr = ModeForm.getFieldValue(dqbjr_fieldid);
if(bjr != userid){
antd.Modal.warning({title:'系统提醒',content:'该表单有人正在编辑,已锁定。',okText:"确认",onok(){
history.back();
},onCancel() {
history.back();
}})
}
},5);
})