Activiti学习笔记第十篇:并行网关

1. 流程图

Activiti学习笔记第十篇:并行网关_第1张图片

2. 部署流程定义+启动流程实例

// 部署流程定义,启动流程实例
@Test
public void testParallelGateWay() throws Excepiton {
	// 1 发布流程
	InputStream inputStreamBpmn = this.getClass().getResourceAsStream("paralleProcess.bpmn");
	InputStream inputStreamPng = this.getClass().getResourceAsStream("parallelProcess.png");
	processEngine.getRepositoryService()//
						.createDeployment()//
						.addInputStream("parallelProcess.bpmn", inputStreamBpmn)//
						.addInputStream("parallelProcess.png", inputStramPng)//
						.deploy();
	// 2 启动流程
	ProcessInstance pi = processEngine.getRuntimeService()//
											.startProcessInstanceByKey("parallelProcess");
	System.out.println("pid:"+pi.getId());
}

3. 查询我的个人任务

// 查询我的个人任务
@Test
public void findMyTaskLIst() {
	String userId = "商家";
	List list = processEngine.getTaskService()//
						.createTaskQuery()//
						.taskAssignee(userId)//指定个人任务查询
						.list();
	for(Task task : list){
		System.out.println("id="+task.getId());
		System.out.println("name="+task.getName());
		System.out.println("assinee="+task.getAssignee());
		System.out.println("assinee="+task.getCreateTime());
		system.out.println("executionId="+task.getExecutionId());
	}
}

4. 完成我的个人任务

// 完成任务
@Test
public void completeTask(){
	String taskId = "2502";
	processEngine.getTaskService()//
					.complete(taskId);//
	System.out.println("完成任务");
}

说明:
1) 一个流程中流程实例只有1个,执行对象有多个
2) 并行网关的功能是基于进入和外出的顺序流的:
  分支(fork): 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
  汇聚(join): 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。
3) 并行网关的进入和外出都是使用相同节点标识
4) 如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。
5) 并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。
6) 并行网关不需要是“平衡的”(比如, 对应并行网关的进入和外出节点数目不一定相等)。如图中标示是合法的:
Activiti学习笔记第十篇:并行网关_第2张图片

你可能感兴趣的:(Activiti)