流程的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>
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);
}
}
}
}
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;
}
}
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
分享到:
相关推荐
**JBPM4.4会签实例详解** JBPM(Java Business Process Management)是一个开源的工作流管理系统,用于管理和执行业务流程。在JBPM4.4版本中,它提供了一个强大的平台来设计、部署和执行复杂的业务流程,其中包括了...
**jbPM4.4 会签与加签减签功能详解** jbPM(jBoss Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行和优化业务流程。在jbPM4.4版本中,会签功能是企业级流程管理中的重要特性,...
**正文** jBPM4.4 是一个强大的工作流管理系统,它允许开发者设计、执行和管理业务流程。在这个系统中,会签功能是一项关键特性,它使得多个参与者...以上所述,希望能为你的jBPM4.4会签功能实现提供一些指导和参考。
在jbpm4.4中,实现这样的会签流程通常涉及以下步骤: 1. **设计流程图**:使用jbpm提供的建模工具,如jBPM Designer,创建包含fork和join节点的流程图。 2. **定义任务**:为每个审批人分配具体的任务,并设置好...
在实际应用中,jbpm4.4还支持流程实例的监控和管理,比如查看流程实例的状态、跟踪变量变化、挂起或激活流程实例等。这使得业务管理者能够实时了解流程执行情况,优化流程效率。 总的来说,jbpm4.4流程图和jpdl文件...
- **持久化存储(Persistence)**:jbpm4.4使用Hibernate进行数据持久化,保存流程实例、任务、变量等信息。 - **工作流服务(WorkItemHandler)**:处理特定任务,如调用外部服务、发送邮件等。 - **任务服务...
3 Jbpm4.4介绍 7 3.1工作流引擎 8 3.2jpdl 8 3.3数据库 8 3.3.1资源库和运行时表结构 8 3.3.2历史数据库表 9 3.3.3身份认证表 9 3.4jbpm.cfg.xml 9 3.5 jbpm.hibernate.cfg.xml 10 3.6logging.properties 10 4 准备...
jbpm4.4会签实例.doc jbpm4.4安装配置step by step.doc jbpm4自带数据库分析.doc jBPM_4教程PPT.pdf JBPM与SSH架构融合.doc 工作流模型分析_v1.1.pdf 揭秘jbpm流程引擎内核设计思想及构架.doc
JbpmContext.........................................19 2.1.1 JbpmConfiguration...............19 2.1.2 JbpmContext.............................21 2.2 构建jBPM数据库........................................
JbpmContext.........................................19 2.1.1 JbpmConfiguration...............19 2.1.2 JbpmContext.............................21 2.2 构建jBPM数据库........................................
把流程部署到服务器上去 54 4.1 部署流程定义和资源文件 54 4.2 部署流程Java类的3个方法 57 4.3 例程:部署业务流程定义 58 4.4 小结 61 第5章 使用jBPM4 Service API控制流程 62 5.1 流程定义、流程实例和执行的...
1.1.5 会签(多实例用户任务) 会签任务适用于需要多人共同决策的情况,例如审批流程。至少达到预设人数的同意,流程才能继续,否则将被退回。 1.1.6 流程代理 流程代理允许用户在离开或无法执行任务时,将任务授权...