小白学activiti第二天

挂起与激活
流程定义的挂起与激活:

public class ProcessDefinitionSuspend {
	public static void main(String[] args) {
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		RepositoryService repositoryService = processEngine.getRepositoryService();
		ProcessDefinition processDefinition = repositoryService
											.createProcessDefinitionQuery()
											.processDefinitionKey("holiday")
											.singleResult();
		boolean isSuspend = processDefinition.isSuspended();
		if (isSuspend) {
			//如果挂起了,就将这个流程激活
			repositoryService.activateProcessDefinitionByKey("holiday", true, null);
			System.out.println("流程定义ID为" + processDefinition.getId() + "被激活了");
		}else {
			//否则就挂起
			repositoryService.suspendProcessDefinitionByKey("holiday", true, null);
			System.out.println("流程定义ID为" + processDefinition.getId() + "被挂起了");
		}
		
	}

}

流程实例的挂起与激活:
(传入的流程实例ID不能是已经结束的实例ID,否则会报nullpointexception)


public class ProcessInstanceSuspend {
	public static void main(String[] args) {
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		RuntimeService runtimeService = processEngine.getRuntimeService();
		String processInstanceId = "20001";
		ProcessInstance processInstance = runtimeService
								.createProcessInstanceQuery()
								.processInstanceId(processInstanceId)
								.singleResult();
		boolean isSuspend = processInstance.isSuspended();
		if (isSuspend) {
			//如果挂起了,就将这个实例激活
			runtimeService.activateProcessInstanceById(processInstanceId);
			System.out.println("流程实例ID为" + processInstanceId + "被激活了");
		}else {
			//否则就挂起
			runtimeService.suspendProcessInstanceById(processInstanceId);
			System.out.println("流程定义ID为" + processInstanceId + "被挂起了");
		}
		
	}

}



再看一个流程变量Demo:
首先定义一个流程图:
在这里插入图片描述
这里填完请假单后,判断天数,是否大于3天,是则给部门后再总经理审批,否则部门后直接到人事存档。


public class EasyDemo {
	public static void main0(String[] args) {
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		RepositoryService repositoryService = processEngine.getRepositoryService();
		//部署流程定义
		repositoryService.createDeployment().addClasspathResource("diagram/holiday3.bpmn")
										.addClasspathResource("diagram/holiday3.png")
										.deploy();
		//通过流程定义key启动一个流程实例,记得知道流程变量
		RuntimeService runtimeService = processEngine.getRuntimeService();
		Map<String, Object> variables = new HashMap<String,Object>();
		variables.put("user1", "zhangsan");
		variables.put("user2", "lisi");
		variables.put("user3", "wangwu");
		variables.put("user4", "zhaoliu");
		variables.put("num", 4); //zhangsan打算请假4天
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday3",variables);
		System.out.println("流程实例ID:" + processInstance.getId());
		System.out.println("流程定义ID:" + processInstance.getProcessDefinitionId());
		System.out.println("流程定义key:" + processInstance.getProcessDefinitionKey());
		
		
	}
	
	public static void main1(String[] args) {
		//办理任务
		//1:查询zhangsan代办的任务
		String currentUser = "zhangsan";
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		TaskService taskService = processEngine.getTaskService();
		List<Task> tasks = taskService.createTaskQuery().taskAssignee(currentUser).list();
		System.out.println(currentUser +" 待办的任务有:");
		for (Task task : tasks) {
			System.out.print(task.getName());
			System.out.println("  待办任务id:" + task.getId());
			//zhangsan 待办的任务有:
//			填写请假单  待办任务id:14
		}
		
		//2:根据taskId处理任务,处理前可以多判断一下当前用户是否具有该任务的办理权限
		String taskId = "14";
		Task task = taskService.createTaskQuery()
					.taskId(taskId)
					.taskAssignee(currentUser)
					.singleResult();
		
		if (task != null) {
			taskService.complete(taskId);
			System.out.println("任务处理完成");
		}else {
			System.out.println("您没有足够的权限");
		}
		
		
	}
	
	public static void main2(String[] args) {
		//办理任务
		//1:查询lisi代办的任务
		String currentUser = "lisi";
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		TaskService taskService = processEngine.getTaskService();
		List<Task> tasks = taskService.createTaskQuery().taskAssignee(currentUser).list();
		System.out.println(currentUser +" 待办的任务有:");
		for (Task task : tasks) {
			System.out.print(task.getName());
			System.out.println("  待办任务id:" + task.getId());
				//lisi 待办的任务有:
			//	部门领导审批  待办任务id:2502
		}
		
		//2:根据taskId处理任务,处理前可以多判断一下当前用户是否具有该任务的办理权限
		String taskId = "2502";
		Task task = taskService.createTaskQuery()
					.taskId(taskId)
					.taskAssignee(currentUser)
					.singleResult();
		
		if (task != null) {
			taskService.complete(taskId);
			System.out.println("任务处理完成");
		}else {
			System.out.println("您没有足够的权限");
		}
		
		
	}

	
	public static void main3(String[] args) {
		//办理任务
		//1:查询wangwu代办的任务
		String currentUser = "wangwu";
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		TaskService taskService = processEngine.getTaskService();
		List<Task> tasks = taskService.createTaskQuery().taskAssignee(currentUser).list();
		System.out.println(currentUser +" 待办的任务有:");
		if (tasks == null) {
			System.out.println(currentUser + "当前无待办任务");
		}else {
			
			for (Task task : tasks) {
				System.out.print(task.getName());
				System.out.println("  待办任务id:" + task.getId());
			}
		}
		
		//2:根据taskId处理任务,处理前可以多判断一下当前用户是否具有该任务的办理权限
		String taskId = "5002";
		Task task = taskService.createTaskQuery()
					.taskId(taskId)
					.taskAssignee(currentUser)
					.singleResult();
		
		if (task != null) {
			taskService.complete(taskId);
			System.out.println("任务处理完成");
		}else {
			System.out.println("您没有足够的权限");
		}
		
		
	}
	
	public static void main(String[] args) {
		//办理任务
		//1:查询zhaoliu代办的任务
		String currentUser = "zhaoliu";
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		TaskService taskService = processEngine.getTaskService();
		List<Task> tasks = taskService.createTaskQuery().taskAssignee(currentUser).list();
		System.out.println(currentUser +" 待办的任务有:");
		if (tasks == null) {
			System.out.println(currentUser + "当前无待办任务");
		}else {
			
			for (Task task : tasks) {
				System.out.print(task.getName());
				System.out.println("  待办任务id:" + task.getId());
//				zhaoliu 待办的任务有:
//					人事部存档  待办任务id:7502
			}
		}
		
		//2:根据taskId处理任务,处理前可以多判断一下当前用户是否具有该任务的办理权限
		String taskId = "7502";
		Task task = taskService.createTaskQuery()
					.taskId(taskId)
					.taskAssignee(currentUser)
					.singleResult();
		
		if (task != null) {
			taskService.complete(taskId);
			System.out.println("任务处理完成");
		}else {
			System.out.println("您没有足够的权限");
		}
		
		
	}
}

这是一种,直接在实例时把流程变量全给好,
还有一种是在任务节点处理完成后把流程变量给流程实例
(其实还有几种方式,但对于全局流程变量来说大体就分2种)


public class FlowVariable {
	public static void main(String[] args) {
		//续easydemo的流程,这次把流程变量在任务节点处理后定义。
		//也就是在张三填写完请假单后,得到天数传给下一个节点(这里的流程变量作用域仍是全局的)
		
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		Map<String, Object> variables = new HashMap<String, Object>();
		variables.put("user1", "zhangsan");
		variables.put("user2", "lisi");
		variables.put("user3", "wangwu");
		variables.put("user4", "zhaoliu");
		RuntimeService runtimeService = processEngine.getRuntimeService();
		//启动一个流程实例
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday3", variables);
		System.out.println("流程实例id:"+processInstance.getProcessDefinitionId());
		//流程实例id: 12501
		
		//zhangsan开始处理任务
		TaskService taskService = processEngine.getTaskService();
		//看到待办任务(假设只有一个)
		Task task = taskService.createTaskQuery().taskAssignee("zhangsan")
								.singleResult();
		//模拟zhangsan填写完请假表单
		Integer day = 1;
		Map<String, Object> var = new HashMap<String, Object>();
		var.put("num", day);
		//把zhangsan请假天数传入流程实例中
		taskService.complete(task.getId(),var);
		System.out.println("处理完成");
		
		
		//此时lisi查看自己待办的任务
		Task task2 = taskService.createTaskQuery().taskAssignee("lisi").singleResult();
		System.out.println("lisi待办的任务:" + task2.getName());
		//处理完成
		taskService.complete(task2.getId());
		System.out.println("处理完成");
		//结果:lisi待办的任务:部门领导审批
		//处理完成
		
		//此时wangwu查看自己代办的任务
		Task task3 = taskService.createTaskQuery().taskAssignee("wangwu").singleResult();
		if (task3 == null) {
			System.out.println("wangwu没有需要处理的任务");
			//结果:wangwu没有需要处理的任务
		}else {
			System.out.println("wangwu待办的任务:" + task3.getName());
			taskService.complete(task3.getId());
		}
		
		//此时zhaoliu查看自己代办的任务
		Task task4 = taskService.createTaskQuery().taskAssignee("zhaoliu").singleResult();
		if (task4 == null) {
			System.out.println("zhaoliu没有需要处理的任务");
		}else {
			System.out.println("zhaoliu待办的任务:" + task4.getName());
			taskService.complete(task4.getId());
		}
	}

}

另外流程变量的作用域仅在任务节点的情况(局部变量):
查询资料,说局部流程变量只能在该任务节点中设置和获取。
任务节点设置的流程局部变量只能在该“申请请假单”节点获取,“部门领导审批”节点或者"总经理审批"节点获取变量就为空。


public class LocalVariable {
	public static void main0(String[] args) {
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		//由于上一小节操作失误,多启动了一个实例,找了数据库的表,得到实例id为15001
		//所以就直接从zhangsan开整了
		TaskService taskService = processEngine.getTaskService();
		List<Task> tasks = taskService.createTaskQuery()
							.processInstanceId("15001")
							.taskAssignee("zhangsan")
							.list();
		if (tasks != null) {
			for (Task task : tasks) {
				System.out.println("zhangsan待办的任务" + task.getName());
				System.out.println("设置局部流程变量。。。。");
				taskService.setVariableLocal(task.getId(), "num", 2);
				taskService.complete(task.getId());
			}
		}
	}
	
	public static void main(String[] args) {
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		//由于上一小节操作失误,多启动了一个实例,找了数据库的表,得到实例id为15001
		TaskService taskService = processEngine.getTaskService();
		List<Task> tasks = taskService.createTaskQuery()
							.processInstanceId("15001")
							.taskAssignee("lisi")
							.list();
		if (tasks != null) {
			for (Task task : tasks) {
				System.out.println("lisi待办的任务:" + task.getName());
				VariableInstance num = taskService.getVariableInstanceLocal(task.getId(), "num");
				if (num  == null) {
					System.out.println("无值");
					//无值
				}else {
					System.out.println(num.getValue());
				}
			}
		}
	}
}

发布了18 篇原创文章 · 获赞 0 · 访问量 221

猜你喜欢

转载自blog.csdn.net/qq_40992812/article/details/104589505