这个 JUnit 客户端,我们就借用创建项目时自动生成的 SimpleProcessTest.java 了,改写后如下: 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(\orld\);
public void testNewRequest() {
long id = newRequest();
System.out.println(\ + id); checkNewRequest(id);
}
confirmRequest(id); checkconfirmRequest(id); ctx.close();// 关闭 jbpm 容器
/**
* 创建一个请假单 *
* @return */
private long newRequest() {
// 创建一个新流程 ProcessInstance pi =
processDefinition.createProcessInstance();
/**
* 检查请假单的数据 }
// 取得流程的数据环境
ContextInstance ci = pi.getContextInstance(); // 创建一张请假单
ci.setVariable(\, \ 陈刚 www.chengang.com.cn\ ); ci.setVariable(\, 2);
assertEquals(null, ci.getVariable(\)); // 请假申请结束,转到下一个流程结点 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(\));
assertEquals(Integer.valueOf(2),
ci.getVariable(\));
// 当前是结点为 confirm
assertEquals(pi.getRootToken().getNode().getName(),
assertEquals(\ 我要请假 \ , ci.getVariable(\));
\);
/**
* 审批陈刚的请假申请 *
* @param id */ }
// 流程还没结束
assertFalse(pi.hasEnded());
private void confirmRequest(long id) { }
ProcessInstance pi = ctx.loadProcessInstance(id); ContextInstance ci = pi.getContextInstance(); // 不通过
ci.setVariable(\, \ 不准请假,继续加班 \ ); // 审批结束,到下一个流程结点 pi.signal();
private void checkConfirmRequest(long id) {
ProcessInstance pi = ctx.loadProcessInstance(id); ContextInstance ci = pi.getContextInstance(); // ConfirmAction 类在 signal 后执行,所以覆盖了经理的审批
意见
// 当前是结点为 end
assertEquals(pi.getRootToken().getNode().getName(),
assertEquals(\ 准假 \ , ci.getVariable(\));
\); }
这个例子还是很简单,而且关键是缺少用户、组、权限等工作流系统必须的东西,不过没关系。下面的内容我将完成一个更完整的实例。
}
// 流程结束了
assertTrue(pi.hasEnded());

