`
siashuayongsheng
  • 浏览: 118022 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

jbpm 小例子

    博客分类:
  • 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("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()); 

    } 

 

} 



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics