​s-HR互斥锁使用案例之单据编辑互斥原创
金蝶云社区-向高
向高
7人赞赏了该文章 52次浏览 未经作者许可,禁止转载编辑于2024年07月10日 11:26:22

案例场景:工作流自定义了审批界面,其中一个节点同时两个人填写,后提交的人会把先提交人填的信息覆盖掉,此时可以通过二开单据互斥,保证同时只能一个人编辑单据。 效果如下:

image.png


解决思路: 1.在单据编辑时申请互斥锁,如果没有申请到就给出友好提示信息  2.在单据保存时释放互斥锁。


二开参考代码,在二开单据handler中重写父类(EditHandler)的editActionafterSave方法

/**

* 编辑

*/

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();

     }

}


赞 7