在做报销工作流实例时,用到子流程,在TaskInstance的end时出现如下错误提示:
org.jbpm.JbpmException: can't create a process instance when processDefinition is null
at org.jbpm.graph.exe.ProcessInstance.<init>(ProcessInstance.java:87)
......报销流程定义(只列出部分内容)
<task-node name="部门主管审核">
<task name="主管审核">
<controller>
<variable name="baixiaoId" access="read" mapped-name="报销ID"></variable>
</controller>
<assignment class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy" config-type="bean">
<targetBean>managerAssignment</targetBean>
<factoryKey>jbpmConfiguration</factoryKey>
</assignment>
</task>
<transition name="要求修改" to="申请人修改报销单"></transition>
<transition name="主管同意" to="判断走向"></transition>
</task-node>
<decision name="判断走向">
<handler class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy">
<targetBean>processDecision</targetBean>
<factoryKey>jbpmConfiguration</factoryKey>
</handler>
<transition name="大于10000" to="老板审核申请"></transition>
<transition name="小于10000" to="财务处理流程"></transition>
<transition name="主管不同意" to="自动处理申请结果"></transition>
</decision><process-state name="财务处理流程">
<sub-process name="caiwu"/>
<variable name="baixiaoId" access="read" mapped-name="报销ID"></variable>
<transition name="" to="自动处理申请结果"></transition>
</process-state>财务处理流程
<?xml version="1.0" encoding="UTF-8"?><process-definition
xmlns="urn:jbpm.org:jpdl-3.1"
name="caiwu">
<start-state name="start">
<transition name="to_caiwu" to="自动财务处理"></transition>
</start-state>
<end-state name="end1"></end-state>
<node name="自动财务处理">
<event type="node-enter">
<action name="cai" class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy">
<factoryKey>jbpmConfiguration</factoryKey>
<targetBean>caiwuprocessAction</targetBean>
</action>
</event>
<transition name="to_end" to="end1"></transition>
</node>
</process-definition>部门主管审核,做审核通过,部分代码如下:保存审核通过信息.....
JbpmContext jbpmContext=jbpmConfiguration.getCurrentJbpmContext();
if(jbpmContext==null)
{
jbpmContext=jbpmConfiguration.createJbpmContext();
}
try {
TaskInstance ti=jbpmContext.getTaskMgmtSession().getTaskInstance(Long.parseLong(tid));
if(result=="主管同意"||result=="主管不同意")
{
ti.end("主管同意");
}
else{
ti.end("要求修改");
}
执行到ti.end("主管同意")提示
org.jbpm.JbpmException: can't create a process instance when processDefinition is null
at org.jbpm.graph.exe.ProcessInstance.<init>(ProcessInstance.java:87)
......后来查找网上出现的类似问题的解决方法,其中有个方法说是<sub-process 加入属性binding="late",但是提示:cvs-complex-type.3.2.2 Attribute 'binding' is not allowed to appear in element 'sub-process',请使用过Jbpm工作流的高手给予解答,我所使用的jbpm为jbpm-3.1.4.jar,spring-modules-jbpm31.jar
org.jbpm.JbpmException: can't create a process instance when processDefinition is null
at org.jbpm.graph.exe.ProcessInstance.<init>(ProcessInstance.java:87)
......报销流程定义(只列出部分内容)
<task-node name="部门主管审核">
<task name="主管审核">
<controller>
<variable name="baixiaoId" access="read" mapped-name="报销ID"></variable>
</controller>
<assignment class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy" config-type="bean">
<targetBean>managerAssignment</targetBean>
<factoryKey>jbpmConfiguration</factoryKey>
</assignment>
</task>
<transition name="要求修改" to="申请人修改报销单"></transition>
<transition name="主管同意" to="判断走向"></transition>
</task-node>
<decision name="判断走向">
<handler class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy">
<targetBean>processDecision</targetBean>
<factoryKey>jbpmConfiguration</factoryKey>
</handler>
<transition name="大于10000" to="老板审核申请"></transition>
<transition name="小于10000" to="财务处理流程"></transition>
<transition name="主管不同意" to="自动处理申请结果"></transition>
</decision><process-state name="财务处理流程">
<sub-process name="caiwu"/>
<variable name="baixiaoId" access="read" mapped-name="报销ID"></variable>
<transition name="" to="自动处理申请结果"></transition>
</process-state>财务处理流程
<?xml version="1.0" encoding="UTF-8"?><process-definition
xmlns="urn:jbpm.org:jpdl-3.1"
name="caiwu">
<start-state name="start">
<transition name="to_caiwu" to="自动财务处理"></transition>
</start-state>
<end-state name="end1"></end-state>
<node name="自动财务处理">
<event type="node-enter">
<action name="cai" class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy">
<factoryKey>jbpmConfiguration</factoryKey>
<targetBean>caiwuprocessAction</targetBean>
</action>
</event>
<transition name="to_end" to="end1"></transition>
</node>
</process-definition>部门主管审核,做审核通过,部分代码如下:保存审核通过信息.....
JbpmContext jbpmContext=jbpmConfiguration.getCurrentJbpmContext();
if(jbpmContext==null)
{
jbpmContext=jbpmConfiguration.createJbpmContext();
}
try {
TaskInstance ti=jbpmContext.getTaskMgmtSession().getTaskInstance(Long.parseLong(tid));
if(result=="主管同意"||result=="主管不同意")
{
ti.end("主管同意");
}
else{
ti.end("要求修改");
}
执行到ti.end("主管同意")提示
org.jbpm.JbpmException: can't create a process instance when processDefinition is null
at org.jbpm.graph.exe.ProcessInstance.<init>(ProcessInstance.java:87)
......后来查找网上出现的类似问题的解决方法,其中有个方法说是<sub-process 加入属性binding="late",但是提示:cvs-complex-type.3.2.2 Attribute 'binding' is not allowed to appear in element 'sub-process',请使用过Jbpm工作流的高手给予解答,我所使用的jbpm为jbpm-3.1.4.jar,spring-modules-jbpm31.jar
解决方案 »
- 请教下定时从ftp取文件并解析插入数据库的问题
- struts2异常捕获映射 为什么不行?
- 如何用java实现审核功能,请给出例子,源码。在线等
- 急!高分求用Java程序实现对PostgreSQL数据库备份和恢复的方法(比如相关SQL语句什么的)!
- JPA&Hibernate注解(分类自连表)+spring
- 求“jsp2.0技术手册”pdf完整版~
- 500 Action[/moudle] does not contain method named home
- struts怎么显示hibenate多表查询的内容
- 在OA系统中怎么集成office插件,给个入手的方向就可以了
- (新手求教)如何用JAVA解析一段字符串,先谢谢各位高手
- 菜鸟问题:访问ibm websphere 6.0服务器上的页面时,抛出版本JAR版本不能识别的提示
- 求助高手啊 写了个build.xml 用ant实现自动编译发布 出错了
can't create a process instance when processDefinition is null 这个信息说明流程定义还没初始化的时候,你就开始创建实例。
我刚刚才解决.
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(content);//查找子流程
for(JbpmNode jbpmNode : graph.getSubProcesses()){
String subProcessName = jbpmNode.getSubProcessName();
ProcessDefinition subDefinition=jbpmContext.getGraphSession().findLatestProcessDefinition(subProcessName);
if(subDefinition==null){
throw new Exception("请先发布子流程'"+subProcessName+"'");
}
//建立关联关系
ProcessState processState = (ProcessState) processDefinition.getNode(jbpmNode.getName());
processState.setSubProcessDefinition(subDefinition);
}// Deploy the process definition in the database
jbpmContext.deployProcessDefinition(processDefinition);这是我的实际代码.关键在于
//建立关联关系
ProcessState processState = (ProcessState) processDefinition.getNode(jbpmNode.getName());
processState.setSubProcessDefinition(subDefinition);