eas之服务端常用代码
服务端代码的编写主要针对App目录下的 PurOrderControllerBean 实现类,典型的代码有新增、修改、检验等操作
1.提交控制
用户在编辑界面上点击‘保存’按钮时应用框架会调用 PurOrderControllerBean的submit方法,通过重载PurOrderControllerBean父类的submit方法,
可以对要新增、修改的数据进行校验、修正或做一些相关的判断:
protected IObjectPK _submit(Context ctx, IObjectValue model)throws BOSException, EASBizException
{
PurOrderInfo purOrderInfo = (PurOrderInfo) model;
//记录是否是新增,false表示是修改,据此可以作相关操作
boolean isAddNew = true;
if(purOrderInfo.getId()!=null&&_exists(ctx,new ObjectUuidPK(purOrderInfo.getId())))
{isAddNew = false;}
//检查是否设置number
//checkNumber(ctx, otherBillInfo);
//调用父类的方法检查是否有重号
//super._checkNumberDup(ctx, null, purOrderInfo );
//设置值对象中的一些默认值
setDefaultValue(ctx, purOrderInfo);
//校验值对象中的属性是否合法
checkValid(purOrderInfo);
//调用框架的提交方法
return super._submit(ctx, purOrderInfo);
}
对于用户编辑界面上点击'暂存'按钮时调用 protected IObjectPK _save(Context ctx, IObjectValue model){}方法,其操作过程与调用_submit方法类似.
对于服务端的submit方法在实际应用中对应新增addNew或修改update,所以在服务端的架构中submit方法是根据pk是否为空进一步调用update方法,然后在服务端的
实现类中可以重载addNew及update来做具体的处理.例如CoreBaseControllerBean类中的submit方法实现:
protected void _submit(Context ctx,IObjectPK pk,IObjectValue model)throws BOSException,EASBizException{
CoreBaseInfo coreBaseInfo=(CoreBaseInfo)model;
if(isExistPropertyName(ctx,coreBaseInfo,IFWStatus.effectedStatus)){
coreBaseInfo.setInt(IFWStatus.effectedStatus,EffectedStatusEnum.EFFECTED_VALUE);
}
ServiceStateManager.getInstance().enableNextCallServices();
if(coreBaseInfo.getId()!=null&&this.exists(ctx,pk)){
super.update(ctx,pk,coreBaseInfo);
}else{
super.addNew(ctx,pk,coreBaseInfo);
}
}
protected IObjectPK _submit(Context ctx,IObjecrtValue model)throws BOSException,EASBizException{
CoreBaseInfo coreBaseInfo=(CoreBaseInfo)model;
if(isExistPropertyName(ctx,coreBaseInfo,IFWStatus,effectedStatus)){
coreBaseInfo.setInt(IFWStatus.effectedStatus,EffectedStatusEnum.EFFECTED_VALUE);
}
IObjectPK retValue;
ServiceStateManager.getInstance().enableNextCallService();
if(coreBaseInfo.getId!null && this.exists(ctx,new ObjectUuidPK(coreBaseInfo.getId()))){
retValue=new ObjectUuidPK(coreBaseInfo.getId()){
super.update(ctx,retValue,coreBaseInfo);
return retValue;
}
}else{
retValue=super.addNew(ctx,coreBaseInfo);
return retValue;
}
}
在用户的服务端的实现类中的代码如下:
protected void _addNew(Context ctx,IObject pk,IObjectValue model)BizeException{
PurOrderInfp purOrderInfo=(PurOrderInfo)model;
//检查是否设置number
checkNumber(ctx,otherBillInfo);
//检查是否有重号;
checkNumberDup(ctx,null,purOrerInfo);
//设置值对象中的一些默认值
setDefaultValue(ctx,purOrderInfo);
//校验值对象中的属性是否合法
checkValid(purOrderInfo);
//调用框架的提交方法
return super.addNew(ctx,pk,purOrderInfo);
}
2.
3.生成凭证前的控制
通过重载父类的createVoucher方法实现其他控制
protected void createVoucher(Context ctx,String billId)throws BOSException,EASBizException{
IPurOrder purOrder=PurOrderFactory.getLocalInstance(ctx);
//创建pk对象
ObjectUuiPK pk=new ObjectUuidPK(billId);
//在客户端获取用户信息
UserInfo currentUser=(UserInfo)ctx.get(SysContextConstant.USERINFO);
//根据ID返回当前的值对象
PurOrderInfo purOrderInfo;
purOrderInfo=getPurOrderInfo(ctx,pk);
//作相关判断
if(purOrderInfo!=null){
Date billDate=purOrderInfo.getBillDate();
if(billDate!=null){
//作相应处理
}
}
//已生成凭证,不能重复生成凭证
if(purOrderInfo.isFiVouchered()){
throw new IBizException("..............");
}
if(BillStatusEnum.AUDITED.equals(purOrderInfo.getBillStatus())){
//此过程中自动生成凭证
purOrderInfo.setFiVouchered(true);
purOrderInfo.update(pk,otherBillInfo);
}
}
4.生成凭证
protected IObjectValue _genVoucher(Context ctx,String billId)throws BOSException,EASBizException{
//生成凭证 并返回集合
IOjectCollection tmpCollection=null;
//dep动态会计平台
IDAPTransformer iDAPTransformer=DAPTransformerFactory.getLocalInstance(ctx);
CoreBaseInfooCollection coreTransCollection =new CoreBillBaseCollection();
ObjectUuidPK pk=new ObjectUuidPK(billId);
//获取值对象
PurOrderInfo model=(PurOrderInfo)this.getValue(ctx,pk);
coreTransCollection.add(model);
//获取转换后的凭证值对象
tmpCollection=iDAPTransformer.transformAuto(coreTransCollection,DAPVoucherTypeEnum.FIVoucher);
//创建凭证实体对象接口
IVoucher vchCtrl=(IVoucher)VoucherFactory.getLocalInstance(ctx);
//从集合中取出转换后的凭证值对象
VoucherInfo vch=(VoucherInfo)tmpCollection.getObject(0);
VoucherInfo vch1=new VoucherInfo();
vch1=vchCtrl.exteriorLazyLoad(vch,VoucherInfo.getDefaultSelector());
return vch1;
}
5.审核操作
重载父类的_audit方法实现审核控制
protected void _audit(Context ctx,IObjectPK pk)throws BOSException,EASBizException{
//对参数的常用判断
if(pk==null){
throw new IllegalArgumentException();
}
//当前用户
UserInfo currentUser=(UserInfo)ctx.get(SysContextConstant.USERINFO);
//当前日期
Date currentDate=new Date();
//检查单据是否存在, PurOrderBizException 是用户定义的异常类 BillStatusEnum自定义枚举项
boolean exist=exists(ctx,pk);
if(!exist){
throw new PurOrderBizException(PurOrderBizException.BILL_NOTEXIST);
}
PurOrderInfo purOrderInfo=getPurOrderInfo(ctx,pk);
//设置审核人
purOrderInfo.setAuditor(currentUser);
//设置审核日期
purOrderInfo.setAuditDate(currentDate);
//设置单据的状态为--己审核
purOrderInfo.setBillStatus(BillStatusEnum.AUDITD);
//更新实体
完成审核标记
update(ctx,pk,purOrderInfo);
}