工作流笔记第三天_流程实例
0、流程实例的表
-- 流程实例,执行对象,任务
-- 1、解析.bpmn后得到的流程定义规则的信息,工作流系统就是按照流程定义的规则执行的。
select * FROM act_ru_execution; -- 正在执行的执行对象表 
select * FROM act_hi_procinst;  -- 流程实例的历史表
select * FROM act_ru_task; -- 正在执行的任务表(只有节点是UserTask的时候,该表中存在数据)
select * FROM act_hi_taskinst; -- 任务历史表(只有节点是UserTask的时候,该表中存在数据)
select * FROM act_hi_actinst;  -- 所有活动节点的历史表
1、结论:
(1)如果是单例流程(没有分支和聚合),那么流程实例ID和执行对象ID是相同的;
(2)一个流程实例只有一个,执行对象可以有多个


代码实现:
package itheima.processDefinition;
import java.io.InputStream;
import java.util.List;
import java.util.zip.ZipInputStream;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.task.Task;
import org.junit.Test;
public class ProcessInstance {
	// 获得工作流引擎对象
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/* 部署流程定义(从zip中部署流程定义)
把helloWord.bpmn和helloWord.png压缩成helloWord.zip放在src/main/resources/diagrams文件夹下
*/
	@Test
	public void deloymentProcessDefinitionFromZip() {
		// 根据反射获取zip文件转换成对应的流
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloWord.zip");
		// 创建流对象
		ZipInputStream zipInputStream = new ZipInputStream(in);
		// 部署对象
		Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
				.createDeployment()// 创建部署对象
				.name("helloWord入门程序")// 添加部署名称
				.addZipInputStream(zipInputStream)// 指定zip格式的文件完成部署
				.deploy();// 完成部署;
		System.out.println("部署id:" + deploy.getId());
		System.out.println("部署名称:" + deploy.getName());
	}
	/* 启动流程实例 */
	@Test
	public void startProcessInstance() {
		// 流程定义的key
		String processDefinitionKey = "helloWord";
		org.activiti.engine.runtime.ProcessInstance processInstance = processEngine.getRuntimeService()// 与正在执行的流程实例和流程对象有关的service
				.startProcessInstanceByKey(processDefinitionKey);
		// 使用流程定义的key启动流程实例,key与helloWord.bpmn中的id值相同
		System.out.println("流程实例id:" + processInstance.getId());
		System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());
	}
	/* 完成我的任务 */
	@Test
	public void completeMyTask() {
		// 任务id
		String taskId = "1002";
		processEngine.getTaskService()// 获取与正在执行任务的service
				.complete(taskId);
		System.out.println("完成任务,任务编号是:" + taskId);
	}
	/* 查询当前人的个人任务 */
	@Test
	public void findMyPersonalTask() {
		String assignee = "王五";
		List<Task> list = processEngine.getTaskService()// 获取与正在执行任务的service
				.createTaskQuery()// 创建任务查询对象
				.taskAssignee(assignee)// 指定个人任务查询,指定办理人
				// .taskCandidateUser(candidateUser)//组任务的办理人查询
				// .processDefinitionId("helloWord:1:704")// 按照流程定义id查询
				// .executionId("801")//按照执行对象id查询
				// .processInstanceId("801")// 流程实例id查询
				.orderByTaskCreateTime().asc()// 按照任务创建时间的升序排列
				// .singleResult()//唯一结果集
				.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());
			}
		}
	}
	/* 查询流程状态(判断流程正在执行还是已经结束) */
	@Test
	public void isProcessEnd() {
		String processInstanceId = "801";
		org.activiti.engine.runtime.ProcessInstance singleResult = processEngine.getRuntimeService()
				.createProcessInstanceQuery()// 创建流程实例查询对象
				.processInstanceId(processInstanceId)// 根据流程实例id查询
				.singleResult();// 返回唯一结果集
		if (singleResult != null) {
			System.out.println("流程还没有执行结束。");
		} else {
			System.out.println("流程已经执行结束!");
		}
	}
	/* 查询历史任务 */
	@Test
	public void queryHistoryTask() {
		String taskAssignee = "张三";
		List<HistoricTaskInstance> list = processEngine.getHistoryService()// 创建于历史有关的服务对象
				.createHistoricTaskInstanceQuery()// 创建查询历史任务实例对象
				.taskAssignee(taskAssignee)// 办理任务的人
				.list();
		if (list != null && list.size() > 0) {
			for (HistoricTaskInstance his : list) {
				System.out.println(his.getProcessInstanceId() + "   " + his.getAssignee() + "    "
						+ his.getTaskDefinitionKey() + "     " + his.getName() + "     " + his.getStartTime() + "    "
						+ his.getEndTime() + "   " + his.getDurationInMillis());
			}
		}
	}
	/* 查询历史流程实例 */
	@Test
	public void queryHistoryProcessInstance() {
		String processInstanceId = "801";
		HistoricProcessInstance his = processEngine.getHistoryService()// 创建于历史相关的服务对象
				.createHistoricProcessInstanceQuery()// 创建查询流程实例对象
				.processInstanceId(processInstanceId).singleResult();
		if (his != null) {
			System.out.println(his.getId() + "     " + his.getProcessDefinitionId() + "    " + his.getStartTime()
					+ "    " + his.getEndTime() + "   " + his.getDurationInMillis());
		}
	}
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号