`

jbpm4.4 会签实例 .

    博客分类:
  • jbpm
 
阅读更多
流程的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会签实例

    **JBPM4.4会签实例详解** JBPM(Java Business Process Management)是一个开源的工作流管理系统,用于管理和执行业务流程。在JBPM4.4版本中,它提供了一个强大的平台来设计、部署和执行复杂的业务流程,其中包括了...

    jBPM4.4 会签(带加签、减签功能)

    **jbPM4.4 会签与加签减签功能详解** jbPM(jBoss Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行和优化业务流程。在jbPM4.4版本中,会签功能是企业级流程管理中的重要特性,...

    jBPM4.4 会签,用custom实现(带加签、减签功能)

    **正文** jBPM4.4 是一个强大的工作流管理系统,它允许开发者设计、执行和管理业务流程。在这个系统中,会签功能是一项关键特性,它使得多个参与者...以上所述,希望能为你的jBPM4.4会签功能实现提供一些指导和参考。

    jbpm4.4 会签 测试( fork & join)

    在jbpm4.4中,实现这样的会签流程通常涉及以下步骤: 1. **设计流程图**:使用jbpm提供的建模工具,如jBPM Designer,创建包含fork和join节点的流程图。 2. **定义任务**:为每个审批人分配具体的任务,并设置好...

    jbpm4.4流程图

    在实际应用中,jbpm4.4还支持流程实例的监控和管理,比如查看流程实例的状态、跟踪变量变化、挂起或激活流程实例等。这使得业务管理者能够实时了解流程执行情况,优化流程效率。 总的来说,jbpm4.4流程图和jpdl文件...

    jbpm4.4 简单请假流程

    - **持久化存储(Persistence)**:jbpm4.4使用Hibernate进行数据持久化,保存流程实例、任务、变量等信息。 - **工作流服务(WorkItemHandler)**:处理特定任务,如调用外部服务、发送邮件等。 - **任务服务...

    jbpm4.4学习笔记

    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 准备...

    JBPM相关文档大全

    jbpm4.4会签实例.doc jbpm4.4安装配置step by step.doc jbpm4自带数据库分析.doc jBPM_4教程PPT.pdf JBPM与SSH架构融合.doc 工作流模型分析_v1.1.pdf 揭秘jbpm流程引擎内核设计思想及构架.doc

    深入浅出jBPM完整版part1

    JbpmContext.........................................19 2.1.1 JbpmConfiguration...............19 2.1.2 JbpmContext.............................21 2.2 构建jBPM数据库........................................

    深入浅出jBPM完整版part2

    JbpmContext.........................................19 2.1.1 JbpmConfiguration...............19 2.1.2 JbpmContext.............................21 2.2 构建jBPM数据库........................................

    JBPM4工作流应用开始指南.rar

    把流程部署到服务器上去 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 流程代理 流程代理允许用户在离开或无法执行任务时,将任务授权...

Global site tag (gtag.js) - Google Analytics