jbpm4.4 会签实例

jbpm4.4 会签实例

转自: http://blog.csdn.net/snrqtdhuqf/article/details/6273984

根据会签的一票否决制编写。

 

流程的XML文件 process.jpd.xml

 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <process name="会签实例" xmlns="http://jbpm.org/4.3/jpdl" description="会签中一个不同意,会签就结束">  
  4.     <start g="110,14,48,48" name="Start">  
  5.         <transition g="-95,-17" name="to JointlySign" to="会签"/>  
  6.     </start>  
  7.     <end g="110,264,48,48" name="End"/>  
  8.     <task g="88,96,92,52" name="会签">  
  9.         <assignment-handler class="test.join.AssignTask">  
  10.         </assignment-handler>  
  11.         <transition g="-71,-17" name="to 执行" to="执行"/>  
  12.         <transition g="-41,-17" name="to 结束" to="End"/>  
  13.     </task>  
  14.     <state g="16,180,92,52" name="执行">  
  15.         <transition g="-41,-17" name="to End" to="End"/>  
  16.     </state>  
  17. </process>  
<?xml version="1.0" encoding="UTF-8"?> <process name="会签实例" xmlns="http://jbpm.org/4.3/jpdl" description="会签中一个不同意,会签就结束"> <start g="110,14,48,48" name="Start"> <transition g="-95,-17" name="to JointlySign" to="会签"/> </start> <end g="110,264,48,48" name="End"/> <task g="88,96,92,52" name="会签"> <assignment-handler class="test.join.AssignTask"> </assignment-handler> <transition g="-71,-17" name="to 执行" to="执行"/> <transition g="-41,-17" name="to 结束" to="End"/> </task> <state g="16,180,92,52" name="执行"> <transition g="-41,-17" name="to End" to="End"/> </state> </process>

 

 

 

 

 

AssignTask.java

 

  1. package test.join;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.jbpm.api.Configuration;  
  6. import org.jbpm.api.ProcessEngine;  
  7. import org.jbpm.api.TaskService;  
  8. import org.jbpm.api.model.OpenExecution;  
  9. import org.jbpm.api.task.Assignable;  
  10. import org.jbpm.api.task.AssignmentHandler;  
  11. import org.jbpm.api.task.Participation;  
  12. import org.jbpm.api.task.Task;  
  13. import org.jbpm.pvm.internal.task.OpenTask;  
  14.   
  15. public class AssignTask implements AssignmentHandler{  
  16.   
  17.     private static final long serialVersionUID = 1L;  
  18.     List<String> participants;  
  19.     ProcessEngine processEngine=Configuration.getProcessEngine();  
  20.     TaskService taskService=processEngine.getTaskService();  
  21.       
  22.     @SuppressWarnings("unchecked")  
  23.     public void assign(Assignable assignable, OpenExecution execution) throws Exception {  
  24.         //System.out.println("分配");   
  25.         String pid=execution.getProcessInstance().getId();  
  26.         //System.out.println("pid :"+pid);   
  27.         Task task=taskService.createTaskQuery().processInstanceId(pid).activityName(execution.getName()).uniqueResult();  
  28.         //System.out.println(task.getName());   
  29.         participants=(List<String>)taskService.getVariable(task.getId(), "participants");  
  30.         if(participants!=null){  
  31.             for(String participant:participants){  
  32.                 //System.out.println(participant);   
  33.                 Task subTask=((OpenTask)task).createSubTask();  
  34.                 subTask.setAssignee(participant);  
  35.                 taskService.addTaskParticipatingUser(task.getId(), participant, Participation.CLIENT);  
  36.             }  
  37.         }  
  38.     }  
  39. }  
package test.join; import java.util.List; import org.jbpm.api.Configuration; import org.jbpm.api.ProcessEngine; import org.jbpm.api.TaskService; import org.jbpm.api.model.OpenExecution; import org.jbpm.api.task.Assignable; import org.jbpm.api.task.AssignmentHandler; import org.jbpm.api.task.Participation; import org.jbpm.api.task.Task; import org.jbpm.pvm.internal.task.OpenTask; public class AssignTask implements AssignmentHandler{ private static final long serialVersionUID = 1L; List<String> participants; ProcessEngine processEngine=Configuration.getProcessEngine(); TaskService taskService=processEngine.getTaskService(); @SuppressWarnings("unchecked") public void assign(Assignable assignable, OpenExecution execution) throws Exception { //System.out.println("分配"); String pid=execution.getProcessInstance().getId(); //System.out.println("pid :"+pid); Task task=taskService.createTaskQuery().processInstanceId(pid).activityName(execution.getName()).uniqueResult(); //System.out.println(task.getName()); participants=(List<String>)taskService.getVariable(task.getId(), "participants"); if(participants!=null){ for(String participant:participants){ //System.out.println(participant); Task subTask=((OpenTask)task).createSubTask(); subTask.setAssignee(participant); taskService.addTaskParticipatingUser(task.getId(), participant, Participation.CLIENT); } } } }

 

 

Sign.java

 

  1. package test.join;  
  2.   
  3. import org.jbpm.api.TaskService;  
  4. import org.jbpm.api.cmd.Command;  
  5. import org.jbpm.api.cmd.Environment;  
  6. import org.jbpm.api.task.Task;  
  7.   
  8. public class Sign implements Command<Boolean>{  
  9.   
  10.     private static final long serialVersionUID = 1L;  
  11.     public static String VAR_SIGN="同意";  
  12.     private String PASS;  
  13.     private String NOPASS;  
  14.     private String parentTaskId;  
  15.     private Task parentTask;  
  16.     private Task joinTask;  
  17.     String pid;  
  18.     public Sign(String parentTaskId,Task joinTask,String PASS,String NOPASS){  
  19.         this.parentTaskId=parentTaskId;  
  20.         this.PASS=PASS;  
  21.         this.NOPASS=NOPASS;  
  22.         this.joinTask=joinTask;  
  23.     }  
  24.       
  25.     public String getPid(){  
  26.         return pid;  
  27.     }  
  28.       
  29.     public Boolean execute(Environment environment) throws Exception {  
  30.         TaskService taskService=environment.get(TaskService.class);  
  31.         parentTask=taskService.getTask(parentTaskId);  
  32.         pid=parentTask.getExecutionId();  
  33.         String sign=(String)taskService.getVariable(joinTask.getId(), VAR_SIGN);  
  34.         if(sign!=null&&sign.equals("不同意")){  
  35.             taskService.completeTask(joinTask.getId());  
  36.             taskService.completeTask(parentTask.getId(), NOPASS);  
  37.             return true;  
  38.         }  
  39.         taskService.completeTask(joinTask.getId());  
  40.         if(taskService.getSubTasks(parentTaskId).size()==0){  
  41.             taskService.completeTask(parentTaskId,PASS);  
  42.             return true;  
  43.         }  
  44.         return false;  
  45.     }  
  46.   
  47. }  
package test.join; import org.jbpm.api.TaskService; import org.jbpm.api.cmd.Command; import org.jbpm.api.cmd.Environment; import org.jbpm.api.task.Task; public class Sign implements Command<Boolean>{ private static final long serialVersionUID = 1L; public static String VAR_SIGN="同意"; private String PASS; private String NOPASS; private String parentTaskId; private Task parentTask; private Task joinTask; String pid; public Sign(String parentTaskId,Task joinTask,String PASS,String NOPASS){ this.parentTaskId=parentTaskId; this.PASS=PASS; this.NOPASS=NOPASS; this.joinTask=joinTask; } public String getPid(){ return pid; } public Boolean execute(Environment environment) throws Exception { TaskService taskService=environment.get(TaskService.class); parentTask=taskService.getTask(parentTaskId); pid=parentTask.getExecutionId(); String sign=(String)taskService.getVariable(joinTask.getId(), VAR_SIGN); if(sign!=null&&sign.equals("不同意")){ taskService.completeTask(joinTask.getId()); taskService.completeTask(parentTask.getId(), NOPASS); return true; } taskService.completeTask(joinTask.getId()); if(taskService.getSubTasks(parentTaskId).size()==0){ taskService.completeTask(parentTaskId,PASS); return true; } return false; } }

 

 

 

test.java

 

  1. package test.join;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import org.jbpm.api.Configuration;  
  9. import org.jbpm.api.ExecutionService;  
  10. import org.jbpm.api.HistoryService;  
  11. import org.jbpm.api.ProcessEngine;  
  12. import org.jbpm.api.ProcessInstance;  
  13. import org.jbpm.api.RepositoryService;  
  14. import org.jbpm.api.TaskService;  
  15. import org.jbpm.api.history.HistoryProcessInstance;  
  16. import org.jbpm.api.task.Task;  
  17.   
  18. public class Test {  
  19.     public static void main(String []args){  
  20.         ProcessEngine processEngine=Configuration.getProcessEngine();  
  21.         ExecutionService executionService=processEngine.getExecutionService();  
  22.         TaskService taskService=processEngine.getTaskService();  
  23.         RepositoryService repositoryService=processEngine.getRepositoryService();  
  24.           
  25.         repositoryService.createDeployment().addResourceFromClasspath("test/join/process.jpdl.xml").deploy();  
  26.           
  27.         Map<String,Object> variables=new HashMap<String,Object>();  
  28.         List<String> pariticipants=new ArrayList<String>();  
  29.         pariticipants.add("yunix");  
  30.         pariticipants.add("snrqtdhuqf");  
  31.         variables.put("participants", pariticipants);  
  32.         ProcessInstance processInstance=executionService.startProcessInstanceByKey("会签实例",variables);  
  33.   
  34.         Task task=taskService.createTaskQuery()  
  35.                             .processInstanceId(processInstance.getId())  
  36.                             .activityName(processInstance.findActiveActivityNames().iterator().next()).uniqueResult();  
  37.           
  38.         //System.out.println(task.getId());   
  39.           
  40.         Task joinTask=taskService.findPersonalTasks("yunix").get(0);  
  41.         Sign sign=new Sign(task.getId(),joinTask,"to 执行","to 结束");  
  42.         processEngine.execute(sign);  
  43.           
  44.         joinTask=taskService.findPersonalTasks("snrqtdhuqf").get(0);  
  45.         sign=new Sign(task.getId(),joinTask,"to 执行","to 结束");  
  46.         processEngine.execute(sign);  
  47.         processInstance=executionService.findProcessInstanceById(processInstance.getId());  
  48.         System.out.println(processInstance.isActive("执行"));  
  49.           
  50.         String executionId = processInstance.findActiveExecutionIn("执行").getId();  
  51.         processInstance=executionService.signalExecutionById(executionId);  
  52.         System.out.println("流程是否结束:"+processInstance.isEnded());  
  53.           
  54.           
  55.           
  56.         processInstance=executionService.startProcessInstanceByKey("会签实例",variables);  
  57.         System.out.println("会签不通过流程开始,流程ID为:"+processInstance.getId()+" ");  
  58.         task=taskService.createTaskQuery()  
  59.                         .processInstanceId(processInstance.getId())  
  60.                         .activityName(processInstance.findActiveActivityNames().iterator().next())  
  61.                         .uniqueResult();  
  62.         joinTask=taskService.findPersonalTasks("yunix").get(0);  
  63.         Map<String,Object> v=new HashMap<String,Object>();  
  64.         v.put(Sign.VAR_SIGN, "不同意");  
  65.         taskService.setVariables(joinTask.getId(), v);  
  66.         sign=new Sign(task.getId(),joinTask,"to 执行","to 结束");  
  67.         System.out.println(processEngine.execute(sign));  
  68.   
  69.         HistoryService historyService=processEngine.getHistoryService();  
  70.         List<HistoryProcessInstance> hProcessInstances = historyService.createHistoryProcessInstanceQuery().processInstanceId(processInstance.getId())  
  71.         .list();  
  72.         for(HistoryProcessInstance h:hProcessInstances){  
  73.             System.out.println("流程"+processInstance.getId()+"状态:"+h.getState());  
  74.         }  
  75.     }  
  76. }  
package test.join; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jbpm.api.Configuration; import org.jbpm.api.ExecutionService; import org.jbpm.api.HistoryService; import org.jbpm.api.ProcessEngine; import org.jbpm.api.ProcessInstance; import org.jbpm.api.RepositoryService; import org.jbpm.api.TaskService; import org.jbpm.api.history.HistoryProcessInstance; import org.jbpm.api.task.Task; public class Test { public static void main(String []args){ ProcessEngine processEngine=Configuration.getProcessEngine(); ExecutionService executionService=processEngine.getExecutionService(); TaskService taskService=processEngine.getTaskService(); RepositoryService repositoryService=processEngine.getRepositoryService(); repositoryService.createDeployment().addResourceFromClasspath("test/join/process.jpdl.xml").deploy(); Map<String,Object> variables=new HashMap<String,Object>(); List<String> pariticipants=new ArrayList<String>(); pariticipants.add("yunix"); pariticipants.add("snrqtdhuqf"); variables.put("participants", pariticipants); ProcessInstance processInstance=executionService.startProcessInstanceByKey("会签实例",variables); Task task=taskService.createTaskQuery() .processInstanceId(processInstance.getId()) .activityName(processInstance.findActiveActivityNames().iterator().next()).uniqueResult(); //System.out.println(task.getId()); Task joinTask=taskService.findPersonalTasks("yunix").get(0); Sign sign=new Sign(task.getId(),joinTask,"to 执行","to 结束"); processEngine.execute(sign); joinTask=taskService.findPersonalTasks("snrqtdhuqf").get(0); sign=new Sign(task.getId(),joinTask,"to 执行","to 结束"); processEngine.execute(sign); processInstance=executionService.findProcessInstanceById(processInstance.getId()); System.out.println(processInstance.isActive("执行")); String executionId = processInstance.findActiveExecutionIn("执行").getId(); processInstance=executionService.signalExecutionById(executionId); System.out.println("流程是否结束:"+processInstance.isEnded()); processInstance=executionService.startProcessInstanceByKey("会签实例",variables); System.out.println("会签不通过流程开始,流程ID为:"+processInstance.getId()+" "); task=taskService.createTaskQuery() .processInstanceId(processInstance.getId()) .activityName(processInstance.findActiveActivityNames().iterator().next()) .uniqueResult(); joinTask=taskService.findPersonalTasks("yunix").get(0); Map<String,Object> v=new HashMap<String,Object>(); v.put(Sign.VAR_SIGN, "不同意"); taskService.setVariables(joinTask.getId(), v); sign=new Sign(task.getId(),joinTask,"to 执行","to 结束"); System.out.println(processEngine.execute(sign)); HistoryService historyService=processEngine.getHistoryService(); List<HistoryProcessInstance> hProcessInstances = historyService.createHistoryProcessInstanceQuery().processInstanceId(processInstance.getId()) .list(); for(HistoryProcessInstance h:hProcessInstances){ System.out.println("流程"+processInstance.getId()+"状态:"+h.getState()); } } }

 

 

测试结果:

true
流程是否结束:true
会签不通过流程开始,流程ID为:会签实例.17
true
流程会签实例.17状态:ended

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值