`
wj131
  • 浏览: 142494 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

jbpm练习小例子

    博客分类:
  • jbpm
阅读更多

在此非常感谢的人:linliangyi2007:http://linliangyi2007.iteye.com/blog/176345 主要是参考的是他的内容;

还有就是:http://www.blogjava.net/chengang/category/12967.html。以及网上其他的孜孜不倦贡献的人们。

 

 

这次模仿写的是:请假的流程

 

<?xml version="1.0" encoding="UTF-8"?>


<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="testone">

 <swimlane name="bossswimlane" >
 <assignment class="com.firstflow.task.BossAssignmentHandler"></assignment>
 </swimlane>
 <start-state name="开始">
  <transition name="申请开始" to="填写病假申请单">
  </transition>
 </start-state>
 <task-node name="填写病假申请单">
  <task name="填写申请内容">
   <controller>
    <variable name="days"></variable>
   </controller>
   <assignment class="com.firstflow.task.NewLeaveAssignmentHandler">
   </assignment>
  </task>
  <transition to="天数判定" name="病假申请填写完成"></transition>
 </task-node>

 <decision name="天数判定">
  <transition to="经理审批" name="天数小于5天">
   <condition expression='#{days lt 5}'></condition>
  </transition>
  <transition to="总经理审批" name="天数大于或等于5天">
   <condition expression='#{days ge 5}'></condition>
  </transition>
 </decision>
 <task-node name="经理审批">
  <task name="经理开始审批">
   <controller>
    <variable name="fork"></variable>
   </controller>
   <assignment actor-id="manager" ></assignment>
  </task>
  <transition to="总经理审批" name="经理审批通过"></transition>
  <transition to="结束" name="经理审批未通过"></transition>
 </task-node>

 <task-node name="总经理审批">
  <task name="总经理开始审批" swimlane="bossswimlane"></task>
  <transition to="发通知" name="总经理审批通过"></transition>
  <transition to="结束" name="总经理审批未通过"></transition>
 </task-node>

 <node name="发通知">
  <action class="com.firstflow.action.NoteProcessActoinHandler"></action>
  <transition to="结束"></transition>
 </node>

 <end-state name="结束"></end-state>
</process-definition>

 

 

现在再定义相应的类:

BossAssignmentHandler : 动态委派总经理审批的类

public class BossAssignmentHandler implements AssignmentHandler {

 /**
  *
  */
 private static final long serialVersionUID = 8742291098601946988L;

 @Override
 public void assign(Assignable assignable, ExecutionContext executionContext)
   throws Exception {
  /*
   * 动态委派
   */
  ContextInstance ci = executionContext.getContextInstance();
  String user = (String)ci.getVariable("boss");
  //由于 参数“boss”这里没有添加。所以在这里就写死。。。
  assignable.setActorId("boss");

 }

}

NewLeaveAssignmentHandler  给发起申请的人的任务

 

public class NewLeaveAssignmentHandler implements AssignmentHandler {

 /**
  * 填写申请
  */
 private static final long serialVersionUID = 8742291098601946988L;

 
 @Override
 public void assign(Assignable assignable, ExecutionContext executionContext)
   throws Exception {
  /*
   * 将填写申请单的任务分配给流程发起人
   */
  ContextInstance ci = executionContext.getContextInstance();
  String user = (String)ci.getVariable("actor");
  assignable.setActorId(user);

 }

}

 

NoteProcessActoinHandler   审批通过 发通知的类

 

public class NoteProcessActoinHandler implements ActionHandler {

 /**
  *
  */
 private static final long serialVersionUID = -7942030378343202920L;


 @Override
 public void execute(ExecutionContext executionContext) throws Exception {

  ContextInstance ci = executionContext.getContextInstance();
  String user = (String)ci.getVariable("actor");
  Integer days = (Integer)ci.getVariable("days");
  System.out.println(new Date() + " 员工 " + user +  " 请假 " + days + " 天, 已批准!!!");
  /*
   * 这句别漏了,否则流程不会向下走哒
   */
  executionContext.leaveNode();
  
 }

}

 

 

当这些都定义好之后。就是要发布这个流程到数据库中了。

 

DesployTest1 类就是把流程发布到数据库中去,当然首先要一点就是你先要把jbpm的类映射到数据库中去。


public class DesployTest1 {

 /**
  * @param args
  */
 public static void main(String[] args) {
  JbpmConfiguration config = JbpmConfiguration.getInstance();

        // 创建一个 jbpm 容器

        JbpmContext jbpmContext = config.createJbpmContext();

        // 由 processdefinition.xml 生成相对应的流程定义类 ProcessDefinition

        InputStream is = null;
     try {
   is = new FileInputStream("src/main/jpdl/firstflow1/processdefinition.xml");
  } catch (FileNotFoundException e) {
   
   e.printStackTrace();
  }
        ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(is);

        // 利用容器的方法将流程定义数据部署到数据库上

        jbpmContext.deployProcessDefinition(processDefinition);

        // 关闭 jbpmContext

        jbpmContext.close();
        System.out.println("OK");


 }

}

 

现在就是测试类了:

 

MyFlowProcessDBTest 就是测试的类

 

public class MyFlowProcessDBTest {     
    /* 
     * 初始化jBPM配置 
     * 包含对Hibernate的数据库初始化 
     */ 
    static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();      
    public static void main(String[] args){  
        MyFlowProcessDBTest test = new MyFlowProcessDBTest();  
        test.testApplication();  
       // test.test6000YuanApplication();  
       // test.test7000YuanApplication();  
    }  
      
    public void testApplication(){  
        ProcessInstance pi = createProcessInstance("lecord");  
        submitApplication("lecord" , 6);  
        approveByManager(true); 
        approveByBoss(true);
        checkTasks(pi);  
    }  
  
    /** 
     * 生成流程实例  
     */ 
    protected ProcessInstance createProcessInstance(String user){  
        System.out.println("==请假流程开始==");  
        JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();  
        try {  
             GraphSession graphSession = jbpmContext.getGraphSession();  
             /* 
              * 从数据库获取指定的流程定义 
              */ 
             ProcessDefinition pdf  = graphSession.findLatestProcessDefinition("testone");  
             //生成流程实例  
             ProcessInstance pi = pdf.createProcessInstance();  
             //设置流程发起人  
             pi.getContextInstance().createVariable("actor", user);  
             //触发流程转向  
             pi.signal();  
             /* 
              * 保存流程实例  
              */ 
             jbpmContext.save(pi);             
             return pi;  
        }finally{  
            jbpmContext.close();  
        }  
    }  
      
    /** 
     * 填写提交申请单 
     * @param money 
     */ 
    @SuppressWarnings("unchecked")  
    protected void submitApplication(String actorId , int days){  
        System.out.println("==填写请假内容==");   
        JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();  
        try {     
            /* 
             *根据操作者ID,获取属于该操作者的任务集 
             */ 
            List<TaskInstance> taskInstances = jbpmContext.getTaskList(actorId);            
            for(TaskInstance ti : taskInstances){
             System.out.println(ti.getCreate());
                System.out.println("ti.name = " + ti.getName());  
                System.out.println("ti.actor = " + ti.getActorId());  
                ContextInstance ci = ti.getContextInstance();  
                ci.setVariable("days",new Integer(days));  
                ti.end();  
            }             
        }finally{  
            jbpmContext.close();      
        }  
    }  
      
    /** 
     * 部门经理审批 
     * @param pass 
     */ 
    @SuppressWarnings("unchecked")  
    protected void approveByManager(boolean pass){        
        System.out.println("==经理审批==");  
        JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();  
        try{  
            List<TaskInstance> taskInstances = jbpmContext.getTaskList("manager"); 
            System.out.println(taskInstances.size()+"-------经理该审批的taskInstances---------");
           
            for(TaskInstance ti : taskInstances){             
                System.out.println("ti.name = " + ti.getName());  
                System.out.println("ti.actor = " + ti.getActorId());  
                 if(pass){  
                     ti.end("经理审批通过");          
                }else{  
                    ti.end("经理审批未通过");  
                }             
            }  
        }finally{  
            jbpmContext.close();  
        }  
    }  
      
    /** 
     * 总经理审批 
     * @param pass 
     */ 
    @SuppressWarnings("unchecked")  
    protected void approveByBoss(boolean pass){  
        System.out.println("==总经理审批==");          
        JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();  
        try{  
            List<TaskInstance> taskInstances = jbpmContext.getTaskList("boss");  
            for(TaskInstance ti : taskInstances){  
                System.out.println("ti.name = " + ti.getName());  
                System.out.println("ti.actor = " + ti.getActorId());  
                 if(pass){  
                     ti.end("总经理审批通过");       
                }else{  
                    ti.end("总经理审批未通过");  
                }  
            }  
        }finally{  
            jbpmContext.close();  
        }  
    }  
       }

 

 

这个只是模仿的做的。还有很多的不足。引用了别人的成功希望别介意哦。。

 

 

  • 大小: 25.6 KB
分享到:
评论

相关推荐

    jbpm的小例子

    这个“jbpm的小例子”是一个实际应用的案例,展示了如何利用jbpm构建请假审批流程,涵盖了流程定义、任务交互和审批流程的完整生命周期。对于学习和理解jbpm的工作原理和使用方法,这样的例子具有很高的参考价值。

    jbpm演示demo例子

    jbpm演示demo例子

    jbpm4.4请假例子,eclipse工程

    【jbpm4.4请假例子】是一个基于jbpm4.4流程引擎的示例项目,它展示了一个在Eclipse环境中开发的请假流程。jbPM(Java Business Process Management)是一个开源的工作流和业务流程管理框架,它允许开发者设计、执行...

    jBPM4完整例子

    **jBPM4完整例子详解** jBPM4是一个企业级的工作流管理系统,它提供了强大的业务流程管理和工作流实现能力。这个"jBPM4完整例子"是一个基于SSH(Struts2、Spring、Hibernate)框架集成jBPM4.4的请假流程应用,非常...

    我自己写的jbpm小例子

    这个"我自己写的jbpm小例子"旨在帮助用户快速理解jbpm的核心概念和基本操作,以轻松上手这个强大的工具。 首先,让我们深入理解jbpm的主要组件和功能: 1. **流程定义**:jbpm使用BPMN 2.0(Business Process ...

    JBPM_DEMO例子 Hello World

    【JBPM_DEMO例子 Hello World】是入门级的教程,主要展示了如何使用JBPM(Java Business Process Management)工作流引擎实现一个简单的“Hello World”流程。这个例子旨在帮助初学者理解JBPM的基本概念和操作流程。...

    ssh与jbpm完整报销例子

    本例子网上也有,只是有点问题,本人经过修改后想留给第一次学习jbpm的人,希望不让他们为一个问题而花费很长时间. 由于所有的jar包已上传,所以不在用QQ发jar包给各位下载的朋友, 请在以下页面下载本项目的jar包: ...

    JBPM例子

    【JBPM例子】是关于Java Business Process Management System (JBPM) 的一系列示例代码,用于展示如何在实际项目中使用这个工作流引擎。JBPM是一个开源的企业级平台,主要用于管理和执行业务流程。它提供了全面的...

    一个经典的jbpm例子,学jbpm必备的例子

    这是本人学习jbpm以来看过的写的最有条理的一个例子,基于现在网上jbpm的例子比较的少,所以上传上来和大家一起分享

    jbpm5完整的例子

    【jbpm5完整的例子】是针对企业业务流程管理(Business Process Management, BPM)的一个实践教程,其中涵盖了jbpm5框架的多个核心功能和用法。jbPM是一个开源的工作流管理系统,它提供了强大的流程定义、执行和监控...

    JBPM5 完全例子(完全配置)

    JBPM5 完全例子(完全配置)

    jbpm web实例子(完整版)

    **jbpm web实例子(完整版)** jbpm(Java Business Process Management)是一个开源的工作流管理系统,用于构建和管理业务流程。它提供了丰富的API、工作流建模工具以及执行引擎,使得开发者能够轻松地实现复杂的...

    jbpm4.4 完整例子

    【jbpm4.4 完整例子】是一个基于servlet和jsp实现的业务流程管理(BPM)系统示例,它展示了jbpm4.4框架的核心功能和应用场景。jbpm是一个开源的工作流和业务流程管理系统,它允许开发者设计、执行、管理和监控业务...

    jbpm4入门例子

    【jbpm4入门例子——在Tomcat6.0下的实现】 jbPM4,全称Java Business Process Management,是一个开源的工作流管理系统,它提供了一整套工具和服务,用于管理业务流程。jbPM4的设计目标是让业务流程的建模、部署、...

    JBPM4.4例子

    **JBPM4.4入门详解** JBPM,全称Java Business Process Management...通过实践这个简单的jsp+servlet例子,你将能够初步掌握如何在实际应用中使用JBPM。在学习过程中,不断探索和实践,逐步提升你的业务流程管理能力。

    jbpm4 测试例子(项目中含hsqldb数据库)

    **jbpm4测试例子(项目中含hsqldb数据库)** jbpm4 是一个开源的工作流管理系统,它提供了业务流程管理(BPM)和工作流服务。jbpm4的测试例子是一个很好的学习资源,帮助开发者了解如何在实际项目中集成和使用jbpm4。...

    jbpm3.2.2工作流入门例子

    本入门例子旨在帮助初学者快速理解和应用jbpm。 在jbpm3.2.2中,工作流引擎是核心组件,它负责解析流程定义文件(通常为.bpmn或.jpdl.xml格式),并根据这些定义来执行和管理流程实例。jbpm的工作流引擎具有高度可...

    jbpm5 web整合例子

    【jbpm5 web整合例子】是一个关于如何将JBPM5工作流引擎与Web应用程序整合的实践项目,适合那些想要在Web环境中使用业务流程管理(BPM)功能的开发者。JBPM5是一个开源的工作流和业务规则管理系统,它提供了一整套...

    Seam JBPM Eclipse工程例子

    下面将详细解释这些技术及其在"Seam JBPM Eclipse工程例子"中的应用。 1. **Seam**: Seam是一个全面的Java EE框架,它简化了开发过程,特别是在集成各种Java EE组件方面。Seam提供了模型-视图-控制器(MVC)架构...

Global site tag (gtag.js) - Google Analytics