一、说明
这是关于采购流程下推单业务的实现。在这个推单过程中将设置转换规则的代码写在审批BP中,点击审批后报错。控制台输出以下异常信息。
这是关于采购流程下推单业务的实现。在这个推单过程中将设置转换规则的代码写在审批BP中,点击审批后报错。控制台输出以下异常信息。
二、异常信息如下
14:20:04 [AWT-EventQueue-0] ERROR - 未知的错误 nc.vo.pubapp.pattern.exception.CarrierRuntimeException
at nc.vo.pubapp.pattern.exception.ExceptionUtils.wrappBusinessException(ExceptionUtils.java:103)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.changeToBVO(AcePuocodeApproveBP.java:130)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.afterApprove(AcePuocodeApproveBP.java:52)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.approve(AcePuocodeApproveBP.java:41)
at nc.impl.pub.ace.AcePuocodePubServiceImpl.pubapprovebills(AcePuocodePubServiceImpl.java:113)
at nc.impl.pu.PuocodeMaintainImpl.approve(PuocodeMaintainImpl.java:51)
... ...
Caused by: nc.vo.pubapp.pattern.exception.PubAppBusinessException
at nc.vo.pubapp.pattern.exception.ExceptionUtils.wrappBusinessException(ExceptionUtils.java:100)
... 96 more
14:20:04 [AWT-EventQueue-0] ERROR - null nc.vo.pubapp.pattern.exception.PubAppBusinessException
at nc.vo.pubapp.pattern.exception.ExceptionUtils.wrappBusinessException(ExceptionUtils.java:100)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.changeToBVO(AcePuocodeApproveBP.java:130)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.afterApprove(AcePuocodeApproveBP.java:52)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.approve(AcePuocodeApproveBP.java:41)
at nc.impl.pub.ace.AcePuocodePubServiceImpl.pubapprovebills(AcePuocodePubServiceImpl.java:113)
at nc.impl.pu.PuocodeMaintainImpl.approve(PuocodeMaintainImpl.java:51)
at sun.reflect.GeneratedMethodAccessor1459.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
......
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: nc.vo.pubapp.pattern.exception.CarrierRuntimeException
at nc.ui.uif2.NCAction.actionPerformed(NCAction.java:101)
at nc.funcnode.ui.action.ActionDelegate.actionPerformed(ActionDelegate.java:296)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
......
Caused by: nc.vo.pubapp.pattern.exception.CarrierRuntimeException
at nc.vo.pubapp.pattern.exception.ExceptionUtils.wrappBusinessException(ExceptionUtils.java:103)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.changeToBVO(AcePuocodeApproveBP.java:130)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.afterApprove(AcePuocodeApproveBP.java:52)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.approve(AcePuocodeApproveBP.java:41)
at nc.impl.pub.ace.AcePuocodePubServiceImpl.pubapprovebills(AcePuocodePubServiceImpl.java:113)
at nc.impl.pu.PuocodeMaintainImpl.approve(PuocodeMaintainImpl.java:51)
at sun.reflect.GeneratedMethodAccessor1459.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
......
Caused by: nc.vo.pubapp.pattern.exception.PubAppBusinessException
at nc.vo.pubapp.pattern.exception.ExceptionUtils.wrappBusinessException(ExceptionUtils.java:100)
... 142 more
三、问题处理
3.1 Cause By
首先看异常信息,Cause By后跟的说明是异常出现的直接原因。可以看看。这里的ExceptionUtils.wrappBusinessException(message);其中ExceptionUtils是异常工具处理类,wrappBusinessException()是工具标准的方法。是为了捕获异常将异常抛出。错误不可能出现在这个地方。问题还是要从自己代码入手,主要是自己修改过的代码需要注意
3.1 Cause By
首先看异常信息,Cause By后跟的说明是异常出现的直接原因。可以看看。这里的ExceptionUtils.wrappBusinessException(message);其中ExceptionUtils是异常工具处理类,wrappBusinessException()是工具标准的方法。是为了捕获异常将异常抛出。错误不可能出现在这个地方。问题还是要从自己代码入手,主要是自己修改过的代码需要注意
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.changeToBVO(AcePuocodeApproveBP.java:130)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.afterApprove(AcePuocodeApproveBP.java:52)
at nc.bs.pu.puocode.ace.bp.AcePuocodeApproveBP.approve(AcePuocodeApproveBP.java:41)
这个异常信息是:14:20:04 [AWT-EventQueue-0] ERROR - null ,可以看到应该是存在某个对象或变量数据是null导致的。
3.2 Debug
在这里我改动了AcePuocodeApproveBP.java中的代码,而异常显示和这几个方法有关。就是在41行调用了afterApprove(),然后52行调用了changeToBVO()方法,所以问题就是在130行。在此处打上断点。后Debug 运行项目,单击审批按钮触发代码执行到断点处,能执行到断点停下,至少说明前面执行的代码是没有错误的。
然后单步调试,F6代码执行直接跳转到其他类中指定行nc.vo.pu.m23.rule.ChkNumSignWhenSave.java的27行,
boolean isBack = vo.getHVO().getBisback().booleanValue();
3.3 Inspect
跳转到的类中当前行的对象及变量我们可以通过开发工具查询其信息;
选中对象右键选择功能选项
跳转到的类中当前行的对象及变量我们可以通过开发工具查看其信息。选中对象右键选择功能选择inspect,查看对象信息,发现bisback赋值时null。回到AcePuocodeApprove.java中在方法changeToBVO()中初始化bisback即可。重新启动项目审批操作正常执行推单成功。
3.4 修改代码
private void changeToBVO(AggPoOrderVO aggPoOrderVO) {
List<ArriveVO> aggLists = new ArrayList<ArriveVO>();
List<ArriveItemVO> itemLists = new ArrayList<ArriveItemVO>();
PoOrderBVO[] bvos = (PoOrderBVO[]) aggPoOrderVO.getChildrenVO();//表体VO
ArriveVO arriveVO = new ArriveVO();//到货单聚合VO
ArriveHeaderVO arriveHeaderVO = new ArriveHeaderVO();//到货单表头VO
//获取自制采购订单的表头
PoOrderVO headPoOrderVO = aggPoOrderVO.getParentVO();
arriveHeaderVO.setBisback(UFBoolean.FALSE);
arriveHeaderVO.setApprover(headPoOrderVO.getApprover());......