网络互斥-功能互斥开发案例
功能互斥是功能级别的锁,它以锁名称作为标志,指的是运行某一功能时,不允许另一功能运行,如过账时不能录入凭证,运行MRP时不能录入采购订单等等。
如下需求:采购申请单保存时,采购订单不能提交。
采购申请单保存代码:
@Override
protected IObjectPK _save(Context ctx, IObjectValue model)
throws BOSException, EASBizException {
IMutexServiceControl mutexService = MutexServiceControlFactory
.getLocalInstance(ctx);
/** 构造调用参数(执行人、互斥项名称、Action名称、组织等等) */
MutexParameter param = new MutexParameter();
/**
* 对于一次UI操作或一次业务功能操作的请求ID应该只有一个( 不管对应多少个互斥量的请求)
* (请求ID可以通过Uuid requestId= Uuid.create();获取)
*/
Uuid requestId = 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());
/**向服务器递交请求*/
MutexParameter mutex = mutexService.requestMutex3(param);
if (mutex != null) {
UserInfo user = UserFactory.getLocalInstance(ctx).getUserInfo(
new ObjectUuidPK(mutex.getUserID()));
throw new EASBizException(new NumericExceptionSubItem("", "此功能已被"
+ user.getName() + "锁定"));
}
IObjectPK pk = null;
/** 执行业务操作 */
try {
//Thread.sleep(20000);// 延时
pk = super._save(ctx, model);
} catch (Exception e) {
e.printStackTrace();
}
/** 业务操作执行完成,释放锁 */
mutexService.releaseMutex(param.getRequestId());
return pk;
}
采购订单提交代码:
@Override
protected IObjectPK _submit(Context ctx, IObjectValue model)
throws BOSException, EASBizException {
IMutexServiceControl mutexService = MutexServiceControlFactory
.getLocalInstance(ctx);
/** 构造调用参数(执行人、互斥项名称、Action名称、组织等等) */
MutexParameter param = new MutexParameter();
/**
* 对于一次UI操作或一次业务功能操作的请求ID应该只有一个( 不管对应多少个互斥量的请求) (请求ID可以通过Uuid requestId=
* Uuid.create();获取)
*/
Uuid requestId = 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());
/** 向服务器递交请求 */
MutexParameter mutex = mutexService.requestMutex3(param);
if (mutex != null) {
UserInfo user = UserFactory.getLocalInstance(ctx).getUserInfo(
new ObjectUuidPK(mutex.getUserID()));
throw new EASBizException(new NumericExceptionSubItem("", "此功能已被"
+ user.getName() + "锁定"));
}
IObjectPK pk = null;
/** 执行业务操作 */
try {
// Thread.sleep(5000);// 延时
pk = super._submit(ctx, model);
} catch (Exception e) {
e.printStackTrace();
}
/** 业务操作执行完成,释放锁 */
mutexService.releaseMutex(param.getRequestId());
return pk;
}
源码及资料请参考附件资料
网络互斥-功能互斥开发案例
本文2024-09-22 20:09:35发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-111833.html