前面已经完成了HelloWorld(简单请假流程)的后台程序,在这里我们开始开发客户端,我们不是使用Swing、Web展示客户端,而是为了测试,这里使用JUnit 的形式,相信这个会了,其他的应该也容易了。
这里创建SimpleProcessTest .java文件,具体如下:
package com.worldunion.test;
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;
import junit.framework.TestCase;
public class SimpleProcessTest extends TestCase {
private JbpmConfiguration config = JbpmConfiguration.getInstance();
private JbpmContext ctx = config.createJbpmContext();
//根据流程定义名称获取流程定义
private ProcessDefinition processDefinition = ctx.getGraphSession().findLatestProcessDefinition("JbpmHelloWorld");
public void testNewRequest(){
long id = newRequest();
checkNewRequest(id);
confirmRequest(id);
checkConfirmRequest(id);
}
/*
* 创建一个请假单
*/
private long newRequest(){
/** 创建一个流程 **/
ProcessInstance pi = (ProcessInstance) processDefinition.createInstance();
/** 取得流程的数据环境**/
ContextInstance ci = pi.getContextInstance();
/** 创建一张请假单 **/
ci.setVariable("name", "尚武,www.shangwu.com");
ci.setVariable("day", 2);
assertEquals(null, ci.getVariable("note"));
/** 请假申请结束,转到下一个流程节点**/
pi.signal();
return pi.getId();
}
/**
* 检查请假单的数据
*/
private void checkNewRequest(long id){
//从数据库中提取原流程
ProcessInstance pi = ctx.loadProcessInstance(id);
//取得流程的数据环境
ContextInstance ci = pi.getContextInstance();
//创建一张请假单
assertEquals("尚武,www.shangwu.com", ci.getVariable("name"));
assertEquals(Integer.valueOf(2), ci.getVariable("day"));
System.out.println("----------------------------------");
System.out.println(ci.getVariable("note"));
System.out.println("----------------------------------");
assertEquals("我要请假", ci.getVariable("note"));
//当前是节点为confirm
assertEquals(pi.getRootToken().getNode().getName(), "confirm");
//流程还没有结束
assertFalse(pi.hasEnded());
}
/**
* 审批尚武的请假申请
* 同意
*/
private void confirmRequest(long id){
ProcessInstance pi = ctx.getProcessInstance(id);
ContextInstance ci = pi.getContextInstance();
ci.setVariable("note", "不准请假,继续加班");
pi.signal();
System.out.println("----------------------------------");
System.out.println(pi.getRootToken().getNode().getName());
System.out.println("----------------------------------");
}
/**
* 审批尚武请假申请
* 不同意
* @param id
*/
private void checkConfirmRequest(long id){
ProcessInstance pi = ctx.getProcessInstance(id);
ContextInstance ci = pi.getContextInstance();
assertEquals("准假",ci.getVariable("note"));
assertEquals(pi.getRootToken().getNode().getName(),"end");
assertTrue(pi.hasEnded());
}
}
到这里hello World(简单的请假流程基本完成),有兴趣的可以试试。