问题描述
在做报销工作流实例时,用到子流程,在TaskInstance的end时出现如下错误提示:org.jbpm.JbpmException:can'tcreateaprocessinstancewhenprocessDefinitionisnullatorg.jbpm.graph.exe.ProcessInstance.<init>(ProcessInstance.java:87)......报销流程定义(只列出部分内容)<task-nodename="部门主管审核"><taskname="主管审核"><controller><variablename="baixiaoId"access="read"mapped-name="报销ID"></variable></controller><assignmentclass="org.springmodules.workflow.jbpm31.JbpmHandlerProxy"config-type="bean"><targetBean>managerAssignment</targetBean><factoryKey>jbpmConfiguration</factoryKey></assignment></task><transitionname="要求修改"to="申请人修改报销单"></transition><transitionname="主管同意"to="判断走向"></transition></task-node><decisionname="判断走向"><handlerclass="org.springmodules.workflow.jbpm31.JbpmHandlerProxy"><targetBean>processDecision</targetBean><factoryKey>jbpmConfiguration</factoryKey></handler><transitionname="大于10000"to="老板审核申请"></transition><transitionname="小于10000"to="财务处理流程"></transition><transitionname="主管不同意"to="自动处理申请结果"></transition></decision><process-statename="财务处理流程"><sub-processname="caiwu"/><variablename="baixiaoId"access="read"mapped-name="报销ID"></variable><transitionname=""to="自动处理申请结果"></transition></process-state>财务处理流程<?xmlversion="1.0"encoding="UTF-8"?><process-definitionxmlns="urn:jbpm.org:jpdl-3.1"name="caiwu"><start-statename="start"><transitionname="to_caiwu"to="自动财务处理"></transition></start-state><end-statename="end1"></end-state><nodename="自动财务处理"><eventtype="node-enter"><actionname="cai"class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy"><factoryKey>jbpmConfiguration</factoryKey><targetBean>caiwuprocessAction</targetBean></action></event><transitionname="to_end"to="end1"></transition></node></process-definition>部门主管审核,做审核通过,部分代码如下:保存审核通过信息.....JbpmContextjbpmContext=jbpmConfiguration.getCurrentJbpmContext();if(jbpmContext==null){jbpmContext=jbpmConfiguration.createJbpmContext();}try{TaskInstanceti=jbpmContext.getTaskMgmtSession().getTaskInstance(Long.parseLong(tid));if(result=="主管同意"||result=="主管不同意"){ti.end("主管同意");}else{ti.end("要求修改");}执行到ti.end("主管同意")提示org.jbpm.JbpmException:can'tcreateaprocessinstancewhenprocessDefinitionisnullatorg.jbpm.graph.exe.ProcessInstance.<init>(ProcessInstance.java:87)......后来查找网上出现的类似问题的解决方法,其中有个方法说是<sub-process加入属性binding="late",但是提示:cvs-complex-type.3.2.2Attribute'binding'isnotallowedtoappearinelement'sub-process',请使用过Jbpm工作流的高手给予解答,我所使用的jbpm为jbpm-3.1.4.jar,spring-modules-jbpm31.jar
解决方案
解决方案二:
光看你这样描述很难找到问题症状所在。can'tcreateaprocessinstancewhenprocessDefinitionisnull这个信息说明流程定义还没初始化的时候,你就开始创建实例。
解决方案三:
父流程和子流程没有绑定。应该先部署子流程,后部署父流程
解决方案四:
先把子流程模板部署到DB中,最后在JbpmContext.deployProcessDefinition(父流程模板);就不会出现这样的问题了!
解决方案五:
挺烦工作流的
解决方案六:
流程发布的问题.我刚刚才解决.ProcessDefinitionprocessDefinition=ProcessDefinition.parseXmlString(content);//查找子流程for(JbpmNodejbpmNode:graph.getSubProcesses()){StringsubProcessName=jbpmNode.getSubProcessName();ProcessDefinitionsubDefinition=jbpmContext.getGraphSession().findLatestProcessDefinition(subProcessName);if(subDefinition==null){thrownewException("请先发布子流程'"+subProcessName+"'");}//建立关联关系ProcessStateprocessState=(ProcessState)processDefinition.getNode(jbpmNode.getName());processState.setSubProcessDefinition(subDefinition);}//DeploytheprocessdefinitioninthedatabasejbpmContext.deployProcessDefinition(processDefinition);这是我的实际代码.关键在于//建立关联关系ProcessStateprocessState=(ProcessState)processDefinition.getNode(jbpmNode.getName());processState.setSubProcessDefinition(subDefinition);
解决方案七:
该回复于2009-08-28 13:37:35被版主删除
解决方案八:
接触过jbpm和oa系统但没接触有子流程的
解决方案:
这个问题我也碰到过,这个例子我也在刚开始学的时候一直调试,最后问题出在了要先生成财务子流程再生成报销流程这样才行,节点创建是要有先后顺序的,你试试看
解决方案:
先把子流程模板部署到DB中,最后在JbpmContext.deployProcessDefinition(父流程模板);就不会出现这样的问题了!