HISUI
iMedical锁表记录功能
2022年03月11日 10时05分

iMedical锁表记录功能

业务系统经常锁定业务数据需求,当我操作某一业务数据时,希望当前数据不会他人修改。
如在病人结算时,不希望同时医生还为患者写医嘱,或医生为患者下医嘱时,不允许其它医生为同一患者下医嘱。为解决此问题,提供一锁记录接口,接口说明如下:

1. 加锁方法

d ##class(websys.Lock).Lock(lockOid,sessionid, userid, .returnmsg, loginlocation, timeout)
入参 说明 备注
lockOid 要锁的记录,结构为:$Lb(记录id,”表名”) 记录被锁后,再锁同一lockOid会失败
sessionid 会话id
userid 当前用户id
returnmsg 锁失败时会立即写信息到returnmsg中 成功时值为空字符串
loginlocation 登录科室id
timeout 锁住最长时间(单位秒)。可以为空,为空表示一直锁住直到切换菜单或退出系统。timeout有值时不会自动清此锁,只是超时后,别人再锁会忽略此锁且清除此锁 iMedical8.4新加

示例:

/// 医生1在102科室Ab21J89T会话下锁住医嘱52250记录
d ##class(websys.Lock).Lock($Lb(52250,"User.OEOrder"),"Ab21J89T",1,.msg,102)
w msg // 为空字符,表示成功锁住,可以做业务操作
/// 医生2在102科室Ab21J89Q会话下请求锁住医嘱52250记录
d ##class(websys.Lock).Lock($Lb(52250,"User.OEOrder"),"Ab21J89Q",2,.msg,102)
w msg  // 得到失败提示:记录被锁,请联系管理员。(医生1 | 内三科 | 1.1.1.1 | ComputerName1234 | 2022-03-11 10:00:19)
    // 表示有人锁住了,不能使用, 提示相应锁信息给医生2

2.解锁方法

当界面关闭,或切换到其它界面时,可以使用LockClear方法解锁

d ##class(websys.Lock).LockClear(lockOid, sessionid)
入参 说明 备注
lockOid 要锁的记录,结构为:$Lb(记录id,”表名”) 记录被锁后,再锁同一lockOid会失败
sessionid 会话id

联系基础平台组更新类:websys.Lock
扩展了一个解锁的方法,方便前端发起解锁。

d ##class(websys.Lock).LockClear2(classId1, className1, sessionid)
入参 说明 备注
classId1 要锁的记录,表的id
className1 要锁的记录,表的类名
sessionid 会话id

3. 清除当前会话所有锁

d ##class(websys.Lock).LockClearSession(sessionid)

4. 清除当前计算机所有锁

d ##class(websys.Lock).LockClearComputer(comp)

相关参考

iMedical锁表-HISUI页面

上一篇: 下一篇:

1条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

访问量: 379630