Activiti 实现流程部署的步骤及实现
1.创建Acitiviti的部署类
2.定义流程部署
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
/**
* 流程定义的部署
* activiti 表有表有哪些??
* act_re_deployment 部署信息
* act_re_procdef 流程定义的一些信息
* act_ge_bytearray 流程定义的bpmn文件及png文件
*/
public class ActivitDesigener {
//流程定义部署
public static void main(String[] args) {
//1.创建ProcessEngine对象
ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
//2.得到RepositoryService实例
RepositoryService repositoryService= processEngine.getRepositoryService();
//3.进行部署
Deployment deployment=repositoryService.createDeployment()//创建对象
.addClasspathResource("diagram/holiday.bpmn")//添加bpmn资源
.addClasspathResource("diagram/holiday.png")
.name("请假申请单流程")
.deploy();//完成
//4.输出部署的一些信息
System.out.println(deployment.getName());
System.out.println(deployment.getId());
}
}
运行改main 方法 实现流程定义部署
总结
流程定义 流程部署
bpmn ----------------------------》 activiti的三张表
流程实例
流程定义好比是Java 的一个类
流程实例好比是一个java 中的一个实例对象 ,一个流程定义可以对应多个流程实例
Activiti 流程实例的启动
/**
* 流程实例的启动
* 前提是完成 流程部署
*///myProcess_1
public class ActivitiStarinstance {
public static void main(String[] args) {
//1.得到ProcessEngine 对象
ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
//2. 得到RunService 对象
RuntimeService runtimeService=processEngine.getRuntimeService();
//3.创建流程实例 流程定义的key需要知道
ProcessInstance processInstanc=runtimeService.startProcessInstanceByKey("myProcess_1");
//4.输出实例相关的信息
System.out.println("流程部署ID"+processInstanc.getDeploymentId());
System.out.println("流程实例Id"+processInstanc.getId());
System.out.println("活动Id"+processInstanc.getActivityId());
}
}
其中的流程定义的key 可从bpmn查看
启动实例 后影响的表:
act_hi_actinst 已完成的活动信息
act_hi_identitylink 参与者信息
act_hi_procinst 流程实例
act_hi_tskinst 任务实例
act_ru_execution 执行表
act_ru_identitulink 参与者信息
act_ru_task 任务
然后可 进行 查询当前用户的任务列表
/**
* 查询当前用户的任务列表
*/
public class ActivitiTaskQuery {
public static void main(String[] args) {
//1.得到ProcessEngine 对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到TaskService 对象
TaskService taskService = processEngine.getTaskService();
//3.根据流程定义的key,负责人assignee来实现当前用户的任务列表
List<Task> taskList = taskService.createTaskQuery()
.processDefinitionKey("myProcess_1")
.taskAssignee("zhangsan")
.list();
//4.任务列表展示
for (Task task:taskList) {
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("任务ID:"+task.getId());
System.out.println("任务负责人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName());
}
}
}
任务处理
/**
* 用户处理任务
*/
public class ActivitiTaskComplete {
public static void main(String[] args) {
//1.得到ProcessEngine 对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到TaskService 对象
TaskService taskService = processEngine.getTaskService();
//3.处理任务,结合当前用户任务列表的查询操作,任务Id:2505
taskService.complete("2505"); //应先添加查询 查询完成 获得任务ID
}
}
任务完成 运行完 表中的变化
处理当前用户的任务
背后操作的表:
act_hi_actinst
act_hi_identitylink
act_hi_taskinst
act_ru_execution
act_ru_identitylink
act_tu_task
一样的操作 重复把流程的任务处理完成
任务处理完后
实现闭环