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());
}
}
分享到:
相关推荐
jbpm 初级学习小示例 很好用 便于理解
JBPM4.4入门例子(jsp+servlet)纯粹了解接口和基本操作。 jar包请到官网下载 另外项目部署之后可能会有问题,见里面的《部署说明》 希望对刚接触的朋友有用
几个JBPM例子,全部原代码
JBPM5.4例子,已经能够运行。使用MYSQL数据库。
jbpm5完整的例子,用户任务,单元测试,
这是本人学习jbpm以来看过的写的最有条理的一个例子,基于现在网上jbpm的例子比较的少,所以上传上来和大家一起分享
这是一个完整的jbpm借款例子 调试环境tomcat6 +jbpm 3.2 + jdk5 tomcat6 lib里边要有 commons-collections.jar mysql-connector-java.jar jta.jar commons-digester.jar 然后创建数据名称 testjbpm 编码为gbk ...
jbpm入门例子收藏 doc.一个使用文档
JBPM5.5例子程序 使用TOMCAT数据库
jbpm演示demo例子
jbpm3.2的小例子,适合初学者练习用啊,高手不要下载了
本例子网上也有,只是有点问题,本人经过修改后想留给第一次学习jbpm的人,希望不让他们为一个问题而花费很长时间. 由于所有的jar包已上传,所以不在用QQ发jar包给各位下载的朋友, 请在以下页面下载本项目的jar包: ...
这是一个完整的jbpm借款例子 调试环境tomcat6 +jbpm 3.2 + jdk5
ssh+jbpm流程例子包 由于包比较大分开上传
ssh+jbpm流程例子包 由于包比较大分开上传
鉴于网上工作流WEB例子实在太少,自己做了个共大家参考
jbpm入门例子,用Myeclipse6.0打开可以直接运行本例子。
jbpm完整例子
jbpm +mysql 小例子
jbpm4.4请假例子,eclipse工程 数据库为自动创建hslsql数据库,每次启动会自动清除