自动任务执行出错,参数为空【parameter :null】

【文章主题】:自动任务执行出错,参数为空
【问题表现】:
工作流中在自动节点执行节点任务绑定的业务方法时发生挂起,报错类似:
Caused by: com.kingdee.bos.workflow.WfException :
自动活动【具体的节点名称】执行时出现异常:自动任务【节点任务绑定的具体业务功能(比如:com.kingdee.shr.costbudget.adjustSalaryBillFunction)】的操作【具体的业务操作功能】时发生错误
parameters:{[参数值:null]}
【问题说明】:
该类问题,为自动节点执行业务方法需要的参数中,部分传递的参数值为空,虽然错误堆栈中已经执行到相关的业务代码报错空指针,但实际上可能是由于工作流中自动节点传递过去的参数值为空,导致业务取不到对应的值而发生异常。所以需要先排查流程定义的配置以及传递的参数为何为空,需要先保证工作流方面传参是符合业务方法参数要求的。
【该类问题排查思路】:
1、查看错误日志,是否如上述报错信息内容类似;
2、提取日志中关键的报错信息:【具体传递给业务方法的参数 & 参数值:parameter :null 、 参数值:null】是否有传递的参数存在null值的情况。
3、导出异常的流程实例定义文件,导入BOS工具中,查看该自动节点的具体配置,重点查看任务-入口参数中设置的流程变量,检查是否已经业务要求配置入口参数,记住你这里设置的流程变量[A]等配置;
4、对比流程属性中的流程变量,与你在步骤3中设置的具体变量对象[比如:A],比较其变量[A]是否有值;
5、在步骤3中导出的流程实例定义中,检查变量[A]在流程定义中检查[流程变量引用]中是否有对该变量[A]做过赋值的操作,变量需要先赋值后才能使用;
6、检查变量[A]在流程定义中,配合流程实例实际运行的情况反向推理变量[A]出现异常前的最后一次赋值的地方,检查是否有取值/赋值异常的情况,导致变量[A]最终被重新赋值覆盖为空值。
【该类问题一般有以下3种可能的异常场景】:
场景一:
【设置的变量只被引用了,从来没有被赋值过,即变量当前值为空值,然后直接传递调用了业务方法】
【Scene1-1】
【案例提单1】:R20191216-2131(当前案例) 、R20201110-3239、R20190102-1124、R20190110-2819
该问题为:工作流中自动节点执行业务方法挂起,报错为:
Caused by: com.kingdee.bos.workflow.WfException :
自动活动【自动】执行时出现异常:自动任务【卡片业务功能(com.kingdee.eas.fi.fa.manage.faCurCardFunction)】的操作【卡片审核(passAudit)】时发生错误
parameters:{[参数值:null]
[参数值:null]}
Caused by: com.kingdee.bos.BOSException :null
Caused exception message is: null
java.lang.NullPointerException
at com.kingdee.eas.fi.fa.manage.app.FaCurCardControllerBean.setWorkflowServiceState(FaCurCardControllerBean.java:2374)

【分析说明】:经检查为节点传入参数【billID】未赋值导致传入空值,导致业务执行方法时报空指针。
【原因总结】:现场不清楚“变量需要先赋值后才能使用”,导致错误配置使用。
【Scene1-2】
【案例提单1】:R20191031-2745
该问题为:工作流中自动节点调用业务方法挂起,报错为:
Caused by: com.kingdee.bos.workflow.WfException :
自动活动【退回重扫】执行时出现异常:自动任务【共享基础服务(com.kingdee.eas.base.wssc.app.WsscCommonFunction)】的操作【退回重扫(rescanImage)】时发生错误
parameters:{[参数值:gZYvpNyAR3SDkHupsO3/ckpE9J8=,参数类型:class com.kingdee.bos.util.BOSUuid]
[参数值:,参数类型:class java.lang.String]
[参数值:,参数类型:class java.lang.String]}
Caused by: com.kingdee.eas.base.wssc.ImageSystemException :未知的影像系统相关异常
java.lang.NullPointerException
at com.kingdee.eas.base.wssc.image.helper.NoticeImageSysHelper_GXHC.rescan(NoticeImageSysHelper_GXHC.java:92)


【分析说明】:
经现场提供的流程配置检查,分析如下:
1.自动节点中,使用的参数2、参数3为空,该些取值与变量【approveResult】有关;
2.approveResult一般是审批对象,在审批节点审批时输出的审批信息;
3.查看流程当前的运行情况,这些赋值的审批节点都没有经过,所以该变量并没有被赋值,所以没有值;
4.在【退回重扫】节点中也只是用了,而没有进行赋值操作,因为没有“被赋值过”,所以变量在使用的时候它也是没有值的;
【原因总结】:业务方法的入口参数中使用了审批对象(approveResult)的子属性,而流程中没有经过审批节点,所以不会输出审批对象,从而导致最终传递给自动节点的入口参数为空。
场景二:
【现场配置使用有误问题,导致设置传递给业务的参数值为空】
【Scene2-1】
【案例提单1】:R20190124-2033(当前案例)、R20201230-2847
该问题为:工作流中自动节点执行业务方法挂起,报错如下:
自动活动【创建影像相关信息】执行时出现异常:自动任务【共享基础服务(com.kingdee.eas.base.wssc.app.WsscCommonFunction)】的操作【单据提交自动创建单据影像映射信息(createBillImageMapInfo)】时发生错误
parameters:{
[参数值:null]
[参数值:null]
[参数值:null]
}
自动任务执行出错,参数为空【parameter :null】
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



