JBPM流程中task,state编程实例

来源:互联网 发布:剑三交易怎么走淘宝 编辑:程序博客网 时间:2024/06/08 14:21

test1.jpdl.xml

Source代码:

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

<process name="test1" xmlns="http://jbpm.org/4.3/jpdl">
   <start g="101,40,48,48" name="start1">
      <transition g="-52,-7" name="to task1" to="task1"/>
   </start>
   <task assignee="#{a1}" g="78,116,92,52" name="task1">
      <transition g="-31,-17" name="to task4" to="task4"/>
   </task>
   <state g="392,122,92,52" name="state1">
      <transition g="-59,-17" name="to state2" to="state2"/>
   </state>
   <state g="394,235,92,52" name="state2">
      <transition g="-22,-21" name="to task2" to="task2"/>
   </state>
   <task assignee="#{a1}" g="237,234,92,52" name="task2">
      <transition g="-59,-17" name="to state3" to="state3"/>
   </task>
   <end g="102,336,48,48" name="end1"/>
   <task assignee="#{a1}" g="229,119,92,52" name="task4">
      <transition g="-25,-20" name="to state1" to="state1"/>
   </task>
   <state g="239,335,92,52" name="state3">
      <transition name="to end1" to="end1" g="-44,10"/>
   </state>
</process>

程序测试代码:
import org.jbpm.api.*;
import org.jbpm.api.task.*;
import java.util.*;
public class T1 {

 public  ProcessEngine processEngine;
 public  RepositoryService rs;
 public  ExecutionService es;
 public  TaskService ts;
 public  String deployId;
 public  ProcessInstance processInstance;
 public  String user;
 public T1()
 {
  processEngine=Configuration.getProcessEngine();
  
 }
 public void setUp(String a)
 {
  rs=processEngine.getRepositoryService();
  deployId=rs.createDeployment().addResourceFromClasspath("test1.jpdl.xml").deploy();
  es=processEngine.getExecutionService();
  ts=processEngine.getTaskService();
  Map<String,Object> map = new HashMap<String,Object> ();
  user=a;
  map.put("a1", user);
  processInstance=es.startProcessInstanceByKey("test1",map);
  System.out.println("创建流程实例的返回值:"+processInstance);//实际是创建一个流向---execution[test1.7] 
 }
 public void testInstancce()//测试流程实例
 {
  //System.out.println("创建流程实例的当前节点:"+processInstance.findActiveActivityNames());//返回类中变量的值,但是没有经过更新,所以总维持一个值。
  List<ProcessInstance> pilist=es.createProcessInstanceQuery().list(); //查看有多少个流程实例(流向)
  for(ProcessInstance pi:pilist)//遍历每一个流向里面的节点信息
  { 
   System.out.println("流程实例ID:"+pi.getId());
   System.out.println("流程实例findActiveActivityNames():"+pi.findActiveActivityNames());
   System.out.println("流程实例findActiveExecutionIn()"+pi.findActiveExecutionIn("task1"));//找到当前活动是在哪一个流程指向中
   System.out.println("流程实例GetName():"+pi.getName());
   System.out.println("流程实例GetKey():"+pi.getKey());  
  } 
 }
 public void endTask(String a)//完成task,继续流程
 {
  
  user=a;
  List<Task> tasklist=ts.findPersonalTasks(user);
  for(Task task : tasklist)
  {
   System.out.printf("待办任务:"+task.getName());
   ts.completeTask(task.getId());
  }
 }
 public void signal()//触发state,继续流程
 {
  List<ProcessInstance> pilist1=es.createProcessInstanceQuery().list();
  for(ProcessInstance pi:pilist1)
  {
   pi=es.signalExecutionById(pi.getId());
   System.out.println("流程是否结束:"+pi.isEnded());//查看当前processInstance流程实例的结束情况
  }
 }
 public void delete()//级联删除流程
 {
  rs.deleteDeploymentCascade(deployId);
  System.out.print("!!!!!!!!!!!删除!!!!!!!!!!!!!");
 }

 public static void main(String[] args) {
  System.out.print("用户1:");
  Scanner scan1=new Scanner(System.in);
  String user1=scan1.next();
  /*
  System.out.print("用户2:");//可以对用户2和1一同测试,这里为了突出结果,只测试用户1
  Scanner scan2=new Scanner(System.in);
  String user2=scan2.next();
  */
  T1 t=new T1();
  t.setUp(user1);
  for(int i=0;i<4;i++)
  { 
   t.testInstancce();
   t.endTask(user1);
  }
  t.signal();
  for(int i=0;i<2;i++)
  {
   t.testInstancce();
   t.endTask(user1);
     }
  t.signal();
  for(int i=0;i<2;i++)
  {
   t.testInstancce();
   t.endTask(user1);
  }
  t.signal();
  for(int i=0;i<2;i++)
  {
   t.testInstancce();
   t.endTask(user1);
  }
     t.delete();
 }
}
/*
 ----------测试结果------------
 用户1:a
 创建流程实例的返回值:execution[test1.7]
************************************
 流程实例ID:test1.7
流程实例findActiveActivityNames():[task1]
流程实例findActiveExecutionIn()execution[test1.7]
流程实例GetName():null
流程实例GetKey():null
待办任务:task1
************************************
流程实例ID:test1.7
流程实例findActiveActivityNames():[task4]
流程实例findActiveExecutionIn()null
流程实例GetName():null
流程实例GetKey():null
待办任务:task4
*************************************
流程实例ID:test1.7
流程实例findActiveActivityNames():[state1]
流程实例findActiveExecutionIn()null
流程实例GetName():null
流程实例GetKey():null
*************************************
-----------停在了state1-----------
流程实例ID:test1.7
流程实例findActiveActivityNames():[state1]
流程实例findActiveExecutionIn()null
流程实例GetName():null
流程实例GetKey():null
**************************************
流程是否结束:false---->是由signal方法触发的
流程实例ID:test1.7
流程实例findActiveActivityNames():[state2]
流程实例findActiveExecutionIn()null
流程实例GetName():null
流程实例GetKey():null
**************************************
-----------停在了state2-----------
流程实例ID:test1.7
流程实例findActiveActivityNames():[state2]
流程实例findActiveExecutionIn()null
流程实例GetName():null
流程实例GetKey():null
***************************************
流程是否结束:false
流程实例ID:test1.7
流程实例findActiveActivityNames():[task2]
流程实例findActiveExecutionIn()null
流程实例GetName():null
流程实例GetKey():null
待办任务:task2
***************************************
流程实例ID:test1.7
流程实例findActiveActivityNames():[state3]
流程实例findActiveExecutionIn()null
流程实例GetName():null
流程实例GetKey():null
流程是否结束:true
!!!!!!!!!!!删除!!!!!!!!!!!!!

 */

原创粉丝点击