网络互斥-功能互斥开发案例

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:1

网络互斥-功能互斥开发案例

功能互斥是功能级别的锁,它以锁名称作为标志,指的是运行某一功能时,不允许另一功能运行,如过账时不能录入凭证,运行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;

}

 

源码及资料请参考附件资料

网络互斥-功能互斥开发案例.docx

网络互斥-功能互斥开发案例

功能互斥是功能级别的锁,它以锁名称作为标志,指的是运行某一功能时,不允许另一功能运行,如过账时不能录入凭证,运行MRP时不能录入采购...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息