本人最近在研究jbpm,在写同时递交给下一个流程的时候出现了一个重要的错误。公文流转创建如下:<?xml version="1.0" encoding="UTF-8"?><process-definition
xmlns="" name="test04">
<start-state name="start">
<transition name="提交给张三审批" to="张三审批" condition="#{days lt 5}"></transition>
<transition name="提交给李四审批" to="李四审批" condition="#{days ge 5}"></transition>
</start-state>
<task-node name="张三审批">
<task name="审批">
<assignment actor-id="张三"/>
</task>
<transition name="结束流程" to="完成"></transition>
</task-node>
<task-node name="李四审批">
<task name="审批">
<assignment actor-id="李四"/>
</task>
<transition name="结束流程" to="完成"></transition>
</task-node>
<end-state name="完成"></end-state>
</process-definition>数据库以及公文与流程都已经绑定,这些没问题,但是在提交的时候报了一个这样的错误:
org.jbpm.JbpmException: transition condition #{days lt 5} evaluated to 'false'
at org.jbpm.graph.def.Transition.take(Transition.java:125)
at org.jbpm.graph.def.Node.leave(Node.java:393)
at org.jbpm.graph.node.StartState.leave(StartState.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:147)
at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$7fe4cd8.leave(<generated>)
at org.jbpm.graph.exe.Token.signal(Token.java:194)
at org.jbpm.graph.exe.Token.signal(Token.java:157)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:147)
at org.jbpm.graph.exe.Token$$EnhancerByCGLIB$$b48cf36c.signal(<generated>)
at org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:263)
at com.bjsxt.jbpm.Jbpm_04_SubmitDocument.testSubmitDocument(Jbpm_04_SubmitDocument.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)本人的TestSubmitDocument代码如下(测试单元):package com.bjsxt.jbpm;import junit.framework.TestCase;import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.exe.ProcessInstance;public class Jbpm_04_SubmitDocument extends TestCase {
static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
//将公文提交到第一个环节
public void testSubmitDocument(){
//JbpmContext封装了hibernate session的功能,用来对JBPM相关的对象执行持久化操作
JbpmContext context = jbpmConfiguration.createJbpmContext();
try{
//已知公文信息
int documentId = (Integer)Persistence.getVariable("documentId");
Document doc = (Document)context.getSession().load(Document.class, documentId);
long processInstanceId = doc.getProcessInstanceId();
ProcessInstance instance = context.getProcessInstance(processInstanceId);
//调用signal()方法的时候,JBPM不会去计算在transition上面的条件
//表达式,所以,如果你在调用signal()方法的时候,不指定transitionName
//参数,此方法可能无法执行!
//instance.signal();
instance.signal("提交给张三审批");
}catch(Exception e){
e.printStackTrace();
context.setRollbackOnly();
}finally{
context.close();
}
}
}本人推断是不是流程条件写错了?
<transition name="提交给张三审批" to="张三审批" condition="#{days lt 5}"></transition>
<transition name="提交给李四审批" to="李四审批" condition="#{days ge 5}"></transition>
condition后面的条件错了?
望各位大侠指点~~
xmlns="" name="test04">
<start-state name="start">
<transition name="提交给张三审批" to="张三审批" condition="#{days lt 5}"></transition>
<transition name="提交给李四审批" to="李四审批" condition="#{days ge 5}"></transition>
</start-state>
<task-node name="张三审批">
<task name="审批">
<assignment actor-id="张三"/>
</task>
<transition name="结束流程" to="完成"></transition>
</task-node>
<task-node name="李四审批">
<task name="审批">
<assignment actor-id="李四"/>
</task>
<transition name="结束流程" to="完成"></transition>
</task-node>
<end-state name="完成"></end-state>
</process-definition>数据库以及公文与流程都已经绑定,这些没问题,但是在提交的时候报了一个这样的错误:
org.jbpm.JbpmException: transition condition #{days lt 5} evaluated to 'false'
at org.jbpm.graph.def.Transition.take(Transition.java:125)
at org.jbpm.graph.def.Node.leave(Node.java:393)
at org.jbpm.graph.node.StartState.leave(StartState.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:147)
at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$7fe4cd8.leave(<generated>)
at org.jbpm.graph.exe.Token.signal(Token.java:194)
at org.jbpm.graph.exe.Token.signal(Token.java:157)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:147)
at org.jbpm.graph.exe.Token$$EnhancerByCGLIB$$b48cf36c.signal(<generated>)
at org.jbpm.graph.exe.ProcessInstance.signal(ProcessInstance.java:263)
at com.bjsxt.jbpm.Jbpm_04_SubmitDocument.testSubmitDocument(Jbpm_04_SubmitDocument.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)本人的TestSubmitDocument代码如下(测试单元):package com.bjsxt.jbpm;import junit.framework.TestCase;import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.exe.ProcessInstance;public class Jbpm_04_SubmitDocument extends TestCase {
static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
//将公文提交到第一个环节
public void testSubmitDocument(){
//JbpmContext封装了hibernate session的功能,用来对JBPM相关的对象执行持久化操作
JbpmContext context = jbpmConfiguration.createJbpmContext();
try{
//已知公文信息
int documentId = (Integer)Persistence.getVariable("documentId");
Document doc = (Document)context.getSession().load(Document.class, documentId);
long processInstanceId = doc.getProcessInstanceId();
ProcessInstance instance = context.getProcessInstance(processInstanceId);
//调用signal()方法的时候,JBPM不会去计算在transition上面的条件
//表达式,所以,如果你在调用signal()方法的时候,不指定transitionName
//参数,此方法可能无法执行!
//instance.signal();
instance.signal("提交给张三审批");
}catch(Exception e){
e.printStackTrace();
context.setRollbackOnly();
}finally{
context.close();
}
}
}本人推断是不是流程条件写错了?
<transition name="提交给张三审批" to="张三审批" condition="#{days lt 5}"></transition>
<transition name="提交给李四审批" to="李四审批" condition="#{days ge 5}"></transition>
condition后面的条件错了?
望各位大侠指点~~
解决方案 »
- jsp 页面的 alert框 谢谢 大哥了
- 想用jsp+servlet+javabean做个系统,帮帮忙,谢谢各位好心人了
- 关于session的一个问题。。 大家来看看
- jsp 界面问题!!!!!急
- javac 时,如何才能使用同一包下的其它类?包mypack, 类A.class, B.class, 因为B中用到A,编译B时说找不到A
- 请各位高手指点!如何在Tomcat 5.0中配置虚拟目录,就像在IIS中配置虚拟目录一样。
- 用jrun发布jsp正常,但用了bean就不行了为什么?
- if(request.getParameter("ForInsuS").trim().compareTo("ON")==0){sql += "and ForInsu='"+request.getParameter("ForInsuS")+"'";}
- 用jsp连接oracle数据库的大文本问题,问题解决,立刻结贴。(分不够可加)
- mybatis中merge into批量使用问题
- JavaScript缓存?
- jsp无法连接到oracle
你调用 instance.signal("提交给张三审批"); 符合大于5天的条件吗?
里面写错了。