【工作流】自动任务执行出错,参数类型不匹配(argument type mismatch)

【文章主题】:
工作流自动任务执行出错,参数类型不匹配的情况。
【问题表现】:
工作流中自动节点执行节点任务绑定的业务方法时发生挂起,报错类似:
Caused by: com.kingdee.bos.workflow.WfException :
自动活动【具体的节点名称】执行时出现异常:自动任务【绑定的具体业务方法名称(com.kingdee.eas.业务模块路径.app.具体的一个业务Function)】的操作【具体的业务操作名】时发生错误
parameters:{[参数值:【实际传递的参数值】,参数类型:【实际传递的参数类型】]}
java.lang.IllegalArgumentException: argument type mismatch
【问题说明】:
报错【argument type mismatch】为该(自动)节点在流程中实际传入的参数,与节点配置(的业务方法)要求参数的【类型】不符合导致。
【该类问题排查思路】:
1、查看错误日志,是否如上述报错信息内容类似;
2、提取日志中关键的报错信息:【argument type mismatch】、【传递给业务方法的具体参数&参数值:】
3、导出异常的流程实例定义,导入BOS工具中查看该自动节点的具体配置,重点查看任务-入口参数中设置的流程变量,是否与业务方法要求的参数类型相符;
4、对比流程属性中的流程变量,与你在步骤3中设置的具体变量对象[比如:A],比较其值是否与你设置的目标值的参数类型相符;
5、在步骤3中导出的流程实例定义中,检查变量[A]在哪些地方可能存在给该变量赋值的情况,在结合流程图实际走过的节点,反向推理变量[A]出现异常前的最后一次赋值的地方,检查是否有取值/赋值异常的情况。
【该类问题一般有以下3种可能的异常场景】:
场景一:
【流程配置有误,导致最终传递参数类型与目标参数类型不一致】
【Scene1-1】
【案例提单1】:R20200507-2370
该问题为:工作流中自动节点执行业务方法挂起,报错如下:
Caused by: com.kingdee.bos.workflow.WfException : 自动活动【退回】执行时出现异常:自动任务【领料申请单业务功能(com.kingdee.eas.scm.im.inv.MaterialRequestFunction)】的操作【反审核领料申请单(ActionUnAudit)】时发生错误 parameters:{ [参数值:A3oAAAAyvNVj0wED......
【省略】
参数类型:class com.kingdee.eas.base.multiapprove.MultiApproveInfo] } java.lang.IllegalArgumentException: argument type mismatch
-----------------------
【分析说明】:即报错【argument type mismatch】(参数类型不匹配),根据提供的资料分析,原因为审批节点【物资管理科科长审批】中错误将审批对象赋值给了变量【billId】导致变量值异常,最终传递给业务方法时报错参数不匹配。


【原因总结】: (审批节点中输出审批明细将审批id输出给了单据id变量,不小心导致的配置有误)
--现场节点输出参数中错误配置赋值,导致变量存储异常,造成传递的参数异常
【Scene1-2】
【案例提单2】:R20191127-0643
该问题为:工作流中自动节点执行挂起,报错如下:
Caused by: com.kingdee.bos.workflow.WfException :
自动活动【审核中】执行时出现异常:自动任务【采购合同编辑功能(com.kingdee.eas.cp.bc.app.ApplyFoPaymentEditUIFunction)】的操作【设置审批中(auditing)】时发生错误
parameters:{[参数值:张彦楠,参数类型:class com.kingdee.eas.base.permission.UserInfo]}
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
【分析说明】:该报错【argument type mismatch】是指参数类型不匹配,自动节点的业务方法要求参数类型为【单据id】,但是当前现场传递的参数为【用户id】,与它(业务方法)需要的类型不匹配,所以报错【argument type mismatch】,经分析根本原因是现场在上一个审批节点中错误将审批人id输出到了变量【billid】中,然后再自动节点中使用了该变量导致。


【原因总结】:业务需要传递单据id,实际传递UserInfo,配置有误
【Scene1-3】
其他提单3:R20190705-0909 没有按业务要求传递用户id,而是传递了用户编码,不理解导致配置有误。
场景二:
【参数初步看符合要求,但实际的参数类型不匹配】
【Scene2-1】
【案例提单1】:R20200517-0569
该问题为:工作流中自动节点调用业务方法报错如下:
Caused by: com.kingdee.bos.workflow.WfException :
自动活动【返还预算】执行时出现异常:自动任务【费用报销平台通用业务功能(com.kingdee.eas.cp.bc.app.ExpenseCommonFunction)】的操作【预算返还(returnBudget)】时发生错误
parameters:{[参数值:nVnPPy01SuGYtb9AaLw2kUpE9J8=,参数类型:class java.lang.String]
[参数值:费用报销单,参数类型:class com.kingdee.eas.cp.bc.BizAccountBillInfo]
[参数值:false,参数类型:class java.lang.Boolean]}
java.lang.IllegalArgumentException: argument type mismatch
---------------------------


【分析说明】:报错【argument type mismatch】代表参数类型不匹配,经分析为变量【id】类型与所需的类型不一致导致,即当前传递的【[参数值:nVnPPy01SuGYtb9AaLw2kUpE9J8=,参数类型:class java.lang.String]】,该变量经过客户OA接口后,变量类型变成了String类型,而业务方法要求的参数类型为【BOID (com.kingdee.bos.util.BOSUuid)】,两者类型不一致导致报错,该问题已指导现场采用设置【单据对象.id】的变量方式处理后问题解决。
【原因总结】:参数中要求传递BOID,但是实际传递了字符串(参数类型为String),导致类型不匹配。
【Scene2-2】
【案例提单2】:R20201202-3954:[BOID]类型与[IObjectPK]类型由程序自动做转换处理
该问题为:流程走向异常问题,现场反馈流程应该往直下(分支A)走,但是实际往左下(分支B)走。
【问题前置分析】:经分析流程走向与变量【isAudit】值相关,当前【isAudit】值为[false],所以流程走向判断是正常的。深入分析该变量为自动节点业务方法赋值,原因是该自动节点执行业务方法报错存在报错,导致业务方法最终返回值为【false】,并最终影响了流程的走向,相关的错误日志在workflow.log里,报错如下:
Execute function error!
The detail is activi
【工作流】自动任务执行出错,参数类型不匹配(argument type mismatch)
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



