您的位置:首页 > 产品设计 > 产品经理

jbpm4.4 会签实例

2011-03-24 13:32 190 查看
开发环境为MyEclipse8.5 jbpm4.4。 

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

 

流程的XML文件 process.jpd.xml

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

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

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

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息