关于ControllerBean中的异常javax.transaction.RollbackException
金蝶云社区-jinweiwen
jinweiwen
0人赞赏了该文章 1,432次浏览 未经作者许可,禁止转载编辑于2016年08月16日 10:33:30

我在WeighControllerBeanEx的_audit方法中,调用自定义方法generateDestBill。
generateDestBill方法会根据预设的单据转换规则,生成审核状态的生产入库单、销售出库单。
单据转换规则设置了数据过滤及规则过滤条件。
generateDestBill不会抛出异常(try-catch了任何可能发生的异常,在catch中直接return)。
经调试发现,正常情况下没有问题,可以达到目的。
但是当单据转换失败时(比如不符合数据过滤规则过滤条件,或者目标单据提交或审核失败,此时会进入generateDestBill方法中的catch部分),虽然generateDestBill可以成功执行完,
但是在_audit方法结束时会提示
com.kingdee.bos.BOSException CONFIG_EXCEPTION
Caused exception message is: javax.transaction.RollbackException

请问是什么原因?谢谢。

如下是我的部分代码。
*******************************************************************************************************
============================================================
protected Map _audit(Context arg0, IObjectPK[] arg1) throws BOSException,
EASBizException {

Map result = super._audit(arg0, arg1);

for(int i=0; i if(arg1[i]==null) continue;

if(generateDestBill(arg0, arg1[i].toString(), "JJD-SCRKD_TEST")){//生成生产入库单(副产品、半成品)成功
//生成销售出库单(副产品、半成品)
generateDestBill(arg0, arg1[i].toString(), "JJD-XSCKD");
}
}

return result;
}

=============================================================
//生成目标单据生产入库单及销售出库单(副产品、半成品)
private boolean generateDestBill(Context ctx, String weighPk, String botNum){
//参数检查
WeighInfo weighInfo = null;
try{
weighInfo = WeighFactory.getLocalInstance(ctx).getWeighInfo(new ObjectStringPK(weighPk));
}catch(Exception e){

}
if(weighInfo==null){
System.out.println("未能找到检斤单记录");

return false;
}

//规则过滤:指定规则
BOTMappingInfo botMappingInfo = null;
try{
BOTMappingCollection bOTMappingCollection = BOTMappingFactory.getLocalInstance(ctx).getBOTMappingCollection("where name='"+botNum+"' and extRule.isEffected=1");
if(bOTMappingCollection!=null && bOTMappingCollection.size()>0){
botMappingInfo = bOTMappingCollection.get(0);
}
}catch(Exception e){
e.printStackTrace();
}
if(botMappingInfo==null){
System.out.println("未找到已启用的单据转换规则【"+botNum+"】。");

return false;
}

//转换过程
IBTPManager iBTPManager = null;
BTPTransformResult btpResult = null;
try {
iBTPManager = BTPManagerFactory.getLocalInstance(ctx);
btpResult = iBTPManager.transform(weighInfo, botMappingInfo);

} catch (Exception e) {
System.out.println("执行单据转换规则【"+botNum+"】时,转换失败。");
e.printStackTrace();

return false;
}

//处理目标单据
IObjectCollection destBillCols = btpResult.getBills();
BOTRelationCollection botRelationCols = btpResult.getBOTRelationCollection();
try{
CoreBillBaseInfo destBillInfo = (CoreBillBaseInfo)destBillCols.getObject(0);
IObjectPK pk=iBTPManager.saveRelations(destBillInfo, botRelationCols);
BOSUuid id = BOSUuid.read(pk.toString());
BOSObjectType bosType = id.getType();
boolean flag = false;
if(bosType.toString().equals("FA1292B4")){//生产入库单
IManufactureRecBill iManufactureRecBill = ManufactureRecBillFactory.getLocalInstance(ctx);
IObjectPK billpk = iManufactureRecBill.submit(destBillInfo);

ManufactureRecBillInfo manufactureRecBillInfo = iManufactureRecBill.getManufactureRecBillInfo(billpk);
if(!manufactureRecBillInfo.getBaseStatus().equals(BillBaseStatusEnum.AUDITED)){
iManufactureRecBill.audit(billpk);
}

flag = true;
}else if(bosType.toString().equals("CC3E933B")){//销售出库单
ISaleIssueBill iSaleIssueBill = SaleIssueBillFactory.getLocalInstance(ctx);
IObjectPK billpk = iSaleIssueBill.submit(destBillInfo);

SaleIssueBillInfo saleIssueBillInfo = iSaleIssueBill.getSaleIssueBillInfo(billpk);
if(!saleIssueBillInfo.getBaseStatus().equals(BillBaseStatusEnum.AUDITED)){
iSaleIssueBill.audit(billpk);
}

flag = true;
}else{
flag = false;
}
return flag;

}catch(Exception e){
System.out.println("执行单据转换规则【"+botNum+"】后,处理目标单据时发生异常。");
e.printStackTrace();

return false;
}