s-HR互斥锁使用案例之单据编辑互斥
案例场景:工作流自定义了审批界面,其中一个节点同时两个人填写,后提交的人会把先提交人填的信息覆盖掉,此时可以通过二开单据互斥,保证同时只能一个人编辑单据。 效果如下:
解决思路: 1.在单据编辑时申请互斥锁,如果没有申请到就给出友好提示信息 2.在单据保存时释放互斥锁。
二开参考代码,在二开单据handler中重写父类(EditHandler)的editAction和afterSave方法:
/**
* 编辑
*/
public String editAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
String billId = this.getBillId(request);
try {
if (billId != null) {
//申请互斥锁,成功返回true
boolean requestObjIDForUpdate = NetCtrlHelper.requestObjIDForUpdate(billId);
if(!requestObjIDForUpdate){
IMutexServiceControl mutexService = MutexServiceControlFactory.getRemoteInstance();
ObjectUpdateLock objectUpdateLock = mutexService.getObjectUpdateLock(billId);
String userName = objectUpdateLock.getUserName();
throw new ShrWebBizException("当前单据正在被"+userName+"编辑,需等待"+userName+"提交或保存之后才能编辑!!");
}
}
} catch (BOSException e) {
throw new SHRWebException(e);
}
return super.editAction(request, response, modelMap);
}
/**
* 描述:保存值对象之后的操作
*
* @param request
* @param response
* @param model
* @throws ShrWebBizException
*/
protected void afterSave(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws SHRWebException {
try {
//释放互斥锁
NetCtrlHelper.releaseObjIDForUpdate(model.getId().toString());
} catch (BOSException e) {
e.printStackTrace();
}
}
s-HR互斥锁使用案例之单据编辑互斥
本文2024-09-16 23:46:51发表“s-hr cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-shr-56745.html