功能互斥是功能级别的锁,它以锁名称作为标志,指的是运行某一功能时,不允许另一功能运行,如过账时不能录入凭证,运行MRP时不能录入采购订单等等。如下需求:采购申请单保存时,采购订单不能提交。采购申请单保存代码:@OverrideprotectedIObjectPK_save(Contextctx,IObjectValuemodel)throwsBOSException,EASBizException{IMutexServiceControlmutexService=MutexServiceControlFactory.getLocalInstance(ctx);/**构造调用参数(执行人、互斥项名称、Action名称、组织等等)*/MutexParameterparam=newMutexParameter();/***对于一次UI操作或一次业务功能操作的请求ID应该只有一个(不管对应多少个互斥量的请求)*(请求ID可以通过UuidrequestId=Uuid.create();获取)*/UuidrequestId=Uuid.create();param.setRequestId(requestId);/**互斥量名称互斥的功能MutexName要相同*/param.setMutexName("采购申请单");/**Action的名称或业务操作的名称*/param.setActionName("采购申请单_保存");/**执行人的ID*/param.setUserID(ContextUtil.getCurrentUserInfo(ctx).getId());/***要操作的业务资料所属的组织ID*(可以设置组织也可以不设置,视业务需求而定)*/param.setOrgUnitID(ContextUtil.getCurrentOrgUnit(ctx).getId());///**所要申请的锁的类型*/param.setMutexLockType(MutexLockType.EXCLUSIVE_LOCK);/**数据中心*/param.setDcName(ctx.getAIS());/**向服务器递交请求*/MutexParametermutex=mutexService.requestMutex3(param);if(mutex!=null){UserInfouser=UserFactory.getLocalInstance(ctx).getUserInfo(newObjectUuidPK(mutex.getUserID()));thrownewEASBizException(newNumericExceptionSubItem("","此功能已被"+user.getName()+"锁定"));}IObjectPKpk=null;/**执行业务操作*/try{//Thread.sleep(20000);//延时pk=super._save(ctx,model);}catch(Exceptione){e.printStackTrace();}/**业务操作执行完成,释放锁*/mutexService.releaseMutex(param.getRequestId());returnpk;}采购订单提交代码:@OverrideprotectedIObjectPK_submit(Contextctx,IObjectValuemodel)throwsBOSException,EASBizException{IMutexServiceControlmutexService=MutexServiceControlFactory.getLocalInstance(ctx);/**构造调用参数(执行人、互斥项名称、Action名称、组织等等)*/MutexParameterparam=newMutexParameter();/***对于一次UI操作或一次业务功能操作的请求ID应该只有一个(不管对应多少个互斥量的请求)(请求ID可以通过UuidrequestId=*Uuid.create();获取)*/UuidrequestId=Uuid.create();param.setRequestId(requestId);/**互斥量名称*/param.setMutexName("采购申请单");/**Action的名称或业务操作的名称*/param.setActionName("采购申请单_保存");/**执行人的ID*/param.setUserID(ContextUtil.getCurrentUserInfo(ctx).getId());/***要操作的业务资料所属的组织ID(可以设置组织也可以不设置,视业务需求而定)*/param.setOrgUnitID(ContextUtil.getCurrentOrgUnit(ctx).getId());///**所要申请的锁的类型*/param.setMutexLockType(MutexLockType.EXCLUSIVE_LOCK);/**数据中心*/param.setDcName(ctx.getAIS());/**向服务器递交请求*/MutexParametermutex=mutexService.requestMutex3(param);if(mutex!=null){UserInfouser=UserFactory.getLocalInstance(ctx).getUserInfo(newObjectUuidPK(mutex.getUserID()));thrownewEASBizException(newNumericExceptionSubItem("","此功能已被"+user.getName()+"锁定"));}IObjectPKpk=null;/**执行业务操作*/try{//Thread.sleep(5000);//延时pk=super._submit(ctx,model);}catch(Exceptione){e.printStackTrace();}/**业务操作执行完成,释放锁*/mutexService.releaseMutex(param.getRequestId());returnpk;}源码:参考资料: