Activiti流程连线测试

代码:

package com.ytdx.sequenceFlow;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

/**
 * 流程连线测试
 * @author lhy
 *
 */
public class SequenceFlowTest {

	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 1.部署流程定义(从inputStream)
	 */
	@Test
	public void deploymentProcess_inputStream(){
		InputStream inputStreamBpmn = this.getClass().getClassLoader().getResourceAsStream("sequenceFlow.bpmn");
		InputStream inputStreamPng = this.getClass().getClassLoader().getResourceAsStream("sequenceFlow.png");
		Deployment deployment = processEngine.getRepositoryService()                                                //与流程定义和部署对象相关的Service
				.createDeployment()                                                                                 //创建一个部署对象
				.name("连线测试")
				.addInputStream("sequenceFlow.bpmn", inputStreamBpmn)
				.addInputStream("sequenceFlow.png", inputStreamPng)
				.deploy();                                                                                          //完成部署
		System.out.println("部署ID:"+deployment.getId());
		System.out.println("部署名称:"+deployment.getName());
	} 
	
	/**
	 * 2.启动流程实例(act_ru_execution表,act_ru_task表)
	 */
	@Test
	public void startProcessInstance(){
		String processDefinitionKey = "sequenceFlow";                                            //流程定义的key
		ProcessInstance pi = processEngine.getRuntimeService()                                   //与正在执行的流程实例和执行对象相关的Service
				.startProcessInstanceByKey(processDefinitionKey);                                //使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
		System.out.println("流程实例ID:"+pi.getId());                                               //流程实例ID:  2101
		System.out.println("流程定义ID:"+pi.getProcessDefinitionId());                              //流程定义ID:  sequenceFlow:1:2004
	}
	
	/**
	 * 3.查询当前人的个人任务(act_ru_task表)
	 */
	@Test
	public void findPersonalTask(){
		String assignee = "海哥";           
		List<Task> list = processEngine.getTaskService()                                        //与正在执行的任务管理相关的Service
				.createTaskQuery()                                                              //创建任务查询对象
				/**查询条件(where部分)*/
				.taskAssignee(assignee)                                                         //指定个人任务查询,指定办理人
//				.taskCandidateUser(candidateUser)                                               //组任务的办理人查询
//				.processDefinitionId(processDefinitionId)                                       //使用流程定义ID查询
//				.processInstanceId(processInstanceId)                                           //使用流程实例ID查询
//				.executionId(executionId)                                                       //使用执行对象ID查询
				/**排序*/
				.orderByTaskCreateTime().asc()                                                  //使用创建时间的升序排列
				/**返回结果集*/
//				.singleResult()                                                                 //返回惟一结果集
//				.count()                                                                        //返回结果集的数量
//				.listPage(firstResult, maxResults);                                             //分页查询
				.list();                                                                        //返回列表
		if(list !=null && list.size()>0){
			for(Task task:list){
				System.out.println("任务ID:"+task.getId());
				System.out.println("任务名称:"+task.getName());
				System.out.println("任务的创建时间:"+task.getCreateTime());
				System.out.println("任务的办理人:"+task.getAssignee());
				System.out.println("流程实例ID:"+task.getProcessInstanceId());
				System.out.println("执行对象ID:"+task.getExecutionId());
				System.out.println("流程定义ID:"+task.getProcessDefinitionId());
				System.out.println("########################################################");
			}
		}
	}
	
	/**
	 * 4.完成我的任务(act_ru_task表,act_ru_variable表)
	 */
	@Test
	public void completePersonalTask(){
		String taskId = "2104";                                                                 //任务ID
		//完成任务的同时,设置流程变量,使用流程变量用来指定完成任务后,下一个连线,对应sequenceFlow.bpmn文件中${message=='不重要'}
		Map<String, Object> variables = new HashMap<String, Object>();
		variables.put("message", "重要");
		processEngine.getTaskService()                                                          //与正在执行的任务管理相关的Service
		             .complete(taskId, variables);
		System.out.println("完成任务:任务ID:"+taskId);
	}
}

总结:

1、一个活动中可以指定一个或多个SequenceFlow(Start中有一个,End中没有)。

  * 开始活动中有一个SequenceFlow 。

  * 结束活动中没有SequenceFlow 。

  * 其他活动中有1条或多条SequenceFlow

2、如果只有一个,则可以不使用流程变量设置codition的名称;


如果有多个,则需要使用流程变量设置codition的名称。message表示流程变量的名称,‘不重要’表示流程变量的值,${}中间的内容要使用boolean类型的表达式,用来判断应该执行的连线。


猜你喜欢

转载自blog.csdn.net/linhaiyun_ytdx/article/details/80992235