Activiti的学习(四)——流程变量操作、任务类型

    ProcessEngine pe = null;
 
    @Before
    public void init() {
        pe = ProcessEngines.getDefaultProcessEngine();
    }

一、流程变量操作

流程变量指的是使用流程变量进行业务数据的传递,比如请假的原因、天数等

①在启动流程实例时设置

在启动流程实例时,可以添加流程变量。这是添加流程变量的一种时机。

/**
	 * 设置流程变量方式一:在启动流程实例时设置
	 */
	@Test
	public void test1() {
		String processDefinitionKey = "HelloWorldKey";
		Map variables = new HashMap();
		variables.put("key1", "value1");
		variables.put("key2", 200);
		ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(processDefinitionKey, variables);
		System.out.println(pi.getId());
	}

说明:

  1. 在启动流程实例时,通过重载startProcessInstanceByKey的方法可以加载流程变量。
  2. 第二个参数要求是Map类型,意味着可以添加多个流程变量。
  3. 当这段代码执行完以后,会在数据库表act_ru_variable中添加两行记录。

②在办理任务时设置

在办理任务时,有时候任务办理完成以后,要传递一些信息到系统中。这个时候可以利用TaskService这个类来添加流程实例。

	/**
	 * 设置流程变量方式二:在办理任务时设置
	 */
	@Test
	public void test3() {
		String taskId = "50006";
		Map variables = new HashMap();
		variables.put("user", new User(1,"小王"));
		pe.getTaskService().complete(taskId, variables);
	}

③流程变量支持的类型

Jdk中提供的数据类型(String、Integer、List 、Map…),自定义的实体类(要求实现序列化接口 Serializable)

如图是从官网列出来的流程变量的类型:

Activiti的学习(四)——流程变量操作、任务类型_第1张图片

④使用RuntimeService方法获取流程变量

可以通过runTimeService的方法来获取流程变量。说明:这些流程变量是从act_ru_variable这个表中读出来的。

/**
	 * 获取流程变量方式:使用RuntimeService的方法获取
	 */
	@Test
	public void test6() {
		String executionId = "2501";
		Map variables = pe.getRuntimeService().getVariables(executionId);
		// System.out.println(variables);
		Set set = variables.keySet();// key2 key1 user
		for (String key : set) {
			Object value = variables.get(key);
			System.out.println(key + " = " + value);
		}

		Object value = pe.getRuntimeService().getVariable(executionId, "user");
		System.out.println(value);
	}

二、任务的类型

Activiti的学习(四)——流程变量操作、任务类型_第2张图片

①个人任务

由某一个负责办理,在任务表中通过assignee字段记录

②公共任务(组任务)

当前的任务可以由多个人办理, 可以在设计流程图时指定多个办理人

Activiti的学习(四)——流程变量操作、任务类型_第3张图片

/*
 * 公共任务测试
 */
public class PublicTask {
	
	ProcessEngine pe=null;

	@Before
	public void init(){
		pe = ProcessEngines.getDefaultProcessEngine();
	}
	
	/**
	 * 01-部署流程定义
	 */
	@Test
	public void test1(){
		DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
		deploymentBuilder.addClasspathResource("Demo.bpmn");
		deploymentBuilder.addClasspathResource("Demo.png");
		Deployment deployment = deploymentBuilder.deploy();
		System.out.println("流程定义部署成功...");
	}
	
	/**
	 * 02-查询流程定义列表
	 */
	@Test
	public void test2() {
		// 流程定义查询对象,用于查询表act_re_procdef
		ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
		// 添加排序条件
		query.orderByProcessDefinitionVersion().desc();
		// 添加分页查询
		query.listPage(0, 10);
		List list = query.list();
		for (ProcessDefinition pd : list) {
			System.out.println(pd.getId() + "--" + pd.getName()+"--key:"+pd.getKey());
		}
	}
	
	/**
	 * 03-启动流程实例
	 */
	@Test
	public void test3(){
		String processDefinitionId="myProcess:1:60004";
		pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
		System.out.println("流程实例定义成功.....");
	}
	
	/**
	 * 04-办理个人任务
	 */
	@Test
	public void test4(){
		String taskId="62504";
		pe.getTaskService().complete(taskId);
		System.out.println("任务办理成功....");
	}
	
	/**
	 * 05-查询公共任务列表
	 */
	@Test
	public void test5(){
		TaskQuery query = pe.getTaskService().createTaskQuery();
		//根据候选人过滤
		String candidateUser="小黑";
		query.taskCandidateUser(candidateUser);
		List list = query.list();
		for (Task task : list) {
			System.out.println(task.getName()+"----"+task.getId());
		}
	}
	
	/**
	 * 06-拾取任务(将公共任务变为个人任务)
	 */
	@Test
	public void test6(){
		String userId="小黑";
		String taskId="65002";
		pe.getTaskService().claim(taskId, userId);
		System.out.println("任务拾取成功..");
	}
	
	/**
	 * 07-查询个人任务列表
	 */
	@Test
	public void test7() {
		TaskQuery query = pe.getTaskService().createTaskQuery();
		String assignee = "小黑";
		query.taskAssignee(assignee);
		List list = query.list();
		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());
		}
	}
		
	/**
	 * 08-办理任务
	 */
	@Test
	public void test9(){
		String taskId= "65002";
		pe.getTaskService().complete(taskId);
		System.out.println("办理完成,任务ID是:"+taskId);
	}
}

 

③接收任务

接收任务不是由某个人负责办理,而是通过signal方法让流程执行的

Activiti的学习(四)——流程变量操作、任务类型_第4张图片

/**
 * 接受任务测试
 */
public class ReceiveTaskTest {

	ProcessEngine pe=null;

	@Before
	public void init(){
		pe = ProcessEngines.getDefaultProcessEngine();
	}
	
	/**
	 * 01-部署流程定义
	 */
	@Test
	public void test1(){
		DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
		deploymentBuilder.addClasspathResource("Demo1.bpmn");
		deploymentBuilder.addClasspathResource("Demo1.png");
		Deployment deployment = deploymentBuilder.deploy();
		System.out.println("流程定义部署成功...");
	}
	
	/**
	 * 02-查询流程定义列表
	 */
	@Test
	public void test2() {
		// 流程定义查询对象,用于查询表act_re_procdef
		ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
		// 添加排序条件
		query.orderByProcessDefinitionVersion().desc();
		// 添加分页查询
		query.listPage(0, 10);
		List list = query.list();
		for (ProcessDefinition pd : list) {
			System.out.println(pd.getId() + "--" + pd.getName()+"--key:"+pd.getKey());
		}
	}
	
	/**
	 * 03-启动流程实例
	 */
	@Test
	public void test3(){
		String processDefinitionId="myProcess:2:75004";
		pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
		System.out.println("流程实例定义成功.....");
	}
	
	/**
	 * 04-办理任务
	 */
	@Test
	public void test4(){
		String taskId = "77504";
		pe.getTaskService().complete(taskId );
	}
	
	/**
	 * 05-查询流程实例列表,查询act_ru_execution表
	 */
	@Test
	public void test9() {
		// 流程实例查询对象,查询act_ru_execution表
		ProcessInstanceQuery query = pe.getRuntimeService().createProcessInstanceQuery();
		query.processDefinitionKey("myProcess");
		query.orderByProcessInstanceId().desc();
		query.listPage(0, 2);
		List list = query.list();
		for (ProcessInstance pi : list) {
			System.out.println(pi.getId() + " " + pi.getActivityId());
		}
	}
	
	/**
	 * 06-处理接收任务
	 */
	@Test
	public void test5(){
		String executionId = "77501";
		pe.getRuntimeService().signal(executionId);
	}
}

 

你可能感兴趣的:(Activiti)