simpleprocesstest.java

来自「jbpm的一个简单例子,是一个比较好的的入门例子,希望能够好好使用!」· Java 代码 · 共 170 行

JAVA
170
字号
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()); 

    } 

  

} 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?