jbpm 小例子



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());

}



}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值