【activiti】模拟activiti流引擎的流程

流程图如下:

【activiti】模拟activiti流引擎的流程_第1张图片


接下来我们通过代码方式来模拟一下基本流程

1.简历流程图bpmn:

assignee:代理人、指定人、处理人

2.创建流程引擎以及工作流数据表:

创建工作流数据表

数据库及表可以自动创建,可以在配置数据库连接时,实现自动创建数据库和表

3.部署流程:

所影响的表

-- 部署表:id是由act_ge_property的 next_dbid决定
SELECT * FROM act_re_deployment;  

-- 流程定义表:该表的key属性是bpmn的id决定
--  该表的name属性  是bpmn 的name 属性决定
SELECT * FROM act_re_procdef;   

-- 通用属性表
SELECT * FROM act_ge_property; 

-- 开启流程: 执行对象,流程实例,流程对象
SELECT * FROM act_ru_execution;
-- 任务表
SELECT * FROM act_ru_task;

首先获取默认activiti.cfg.xml文件:

private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

文件配置如下:


 
 
   	 
	 
	 
	 
	 
	  
	  
 
 


然后我们部署流程:

/**
 * 部署流程定义
 */
@Test
public void deploy(){
	//取得路程引擎对象
	//获取仓库服务:管理流程定义
	RepositoryService repositoryService = processEngine.getRepositoryService();
	Deployment deployment = repositoryService.createDeployment()    //创建一个部署服务器
			.addClasspathResource("diagrams/LevalBill.bpmn")		//从类路径中添加资源,一次只能添加一个资源
			.addClasspathResource("diagrams/LevalBill.png")
			.name("请假单流程")		//设置部署的名称
			.category("办公类型")
			.deploy();
	
	System.out.println("部署的id:" + deployment.getId());
	System.out.println("部署的名字:" + deployment.getName());
	System.out.println("部署的类型:" + deployment.getCategory());
}

这时我们可以发现以上那几张表上便有了数据:

创建了

4.执行流程:

接下来我们开始执行流程:一开始会到第一个流程上去

/**
 * 执行流程
 */
@Test
public void startProcess(){
	String processDefiKey="myProcess";
	//取运行时服务
	RuntimeService runtimeService = processEngine.getRuntimeService();
	//取得流程实例
	ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefiKey);
	System.out.println("流程实例id:" + pi.getId());
	System.out.println("流程定义id:" + pi.getProcessDefinitionId());
	
}

5.查询任务:

我们可以查询任务,看看任务的进度:

/**
 * 查询任务
 */
@Test
public void queryTask(){
	//任务代理人
	String assignee = "王五";
	//取得任务服务
	TaskService taskService = processEngine.getTaskService();
	//创建一个任务查询对象
	TaskQuery taskQuery = taskService.createTaskQuery();
	//办理人的任务列表
	List list = taskQuery.taskAssignee(assignee)	//指定代理人
	.list();
	//遍历任务列表
	for (Task task : list) {
		System.out.println("任务的id:" + task.getId());
		System.out.println("任务的代理人:" + task.getAssignee());
		System.out.println("任务的名字:" + task.getName());
	}
}

【activiti】模拟activiti流引擎的流程_第2张图片

同时我们在数据库中查找任务表:

【activiti】模拟activiti流引擎的流程_第3张图片


由于我之前执行过了,所以流程是走到了这里。

接下来我们允许任务通过:

6.完成任务:

/**
 * 完成任务
 */
@Test
public void compileTask(){
	String taskId = "302";
	//task:任务的id
	processEngine.getTaskService().complete(taskId);
	System.out.println("任务" + taskId + "执行完毕");
}

我们的流程通过了:

所以任务表的数据也没了

【activiti】模拟activiti流引擎的流程_第4张图片


如果不是最后一个流程,那么它会继续往下一个流程走


你可能感兴趣的:(①java学习,------,activiti)