package
com.sample;
import
junit.framework.TestCase;
import
org.jbpm.JbpmConfiguration;
import
org.jbpm.JbpmContext;
import
org.jbpm.context.exe.ContextInstance;
import
org.jbpm.graph.def.ProcessDefinition;
import
org.jbpm.graph.exe.ProcessInstance;
public
class
SimpleProcessTest extends TestCase {
private
JbpmConfiguration config = JbpmConfiguration.getInstance();
private
JbpmContext ctx = config.createJbpmContext();
// helloworld
对应于
jbpm_processdefinition
表的
name
字段值,也即
processdefinition.xml
的
name
//
这个值得取比较耗时,实际项目里最好和“数据库的
JDBC
连接”一样,让它共享,不要频繁打开关闭。
private
ProcessDefinition processDefinition = ctx.getGraphSession().findLatestProcessDefinition("helloworld");
public
void
testNewRequest() {
long
id = newRequest();
System.out.println("id=" + id);
checkNewRequest(id);
confirmRequest(id);
checkconfirmRequest(id);
ctx.close();//
关闭
jbpm
容器
}
/**
*
创建一个请假单
*
*
@return
*/
private
long
newRequest() {
//
创建一个新流程
ProcessInstance pi = processDefinition.createProcessInstance();
//
取得流程的数据环境
ContextInstance ci = pi.getContextInstance();
//
创建一张请假单
ci.setVariable("name", "
陈刚
www.chengang.com.cn"
);
ci.setVariable("day", 2);
assertEquals(null, ci.getVariable("note"));
//
请假申请结束,转到下一个流程结点
pi.signal();
return
pi.getId();
}
/**
*
检查请假单的数据
*
*
@param
id
*/
private
void
checkNewRequest(long id) {
//
从数据库提取原流程
ProcessInstance pi = ctx.loadProcessInstance(id);
//
取得流程的数据环境
ContextInstance ci = pi.getContextInstance();
//
创建一张请假单
assertEquals("
陈刚
www.chengang.com.cn"
, ci.getVariable("name"));
assertEquals(Integer.valueOf(2), ci.getVariable("day"));
assertEquals("
我要请假
"
, ci.getVariable("note"));
//
当前是结点为
confirm
assertEquals(pi.getRootToken().getNode().getName(), "confirm");
//
流程还没结束
assertFalse(pi.hasEnded());
}
/**
*
审批陈刚的请假申请
*
*
@param
id
*/
private
void
confirmRequest(long id) {
ProcessInstance pi = ctx.loadProcessInstance(id);
ContextInstance ci = pi.getContextInstance();
//
不通过
ci.setVariable("note", "
不准请假,继续加班
"
);
//
审批结束,到下一个流程结点
pi.signal();
}
private
void
checkConfirmRequest(long id) {
ProcessInstance pi = ctx.loadProcessInstance(id);
ContextInstance ci = pi.getContextInstance();
// ConfirmAction
类在
signal
后执行,所以覆盖了经理的审批意见
assertEquals("
准假
"
, ci.getVariable("note"));
//
当前是结点为
end
assertEquals(pi.getRootToken().getNode().getName(), "end");
//
流程结束了
assertTrue(pi.hasEnded());
}
}