jbpm4.4 会签实例

开发环境为MyEclipse8.5 jbpm4.4。 

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

 

流程的XML文件 process.jpd.xml

 

 

 

 

AssignTask.java

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 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)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

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{ 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

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 variables=new HashMap(); List pariticipants=new ArrayList(); 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 v=new HashMap(); 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 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

 

你可能感兴趣的:(java,jsp编程笔记)