Activiti快速学习笔记(2)——基本操作
操作Activiti
流程的部署
将上面在设计器中定义的流程部署到activiti数据库中,就是流程部署。
- 单文件部署
分别将bpmn和png文件部署
@Test
public void singleDeploy(){
// 1.获取ProcessEngine
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 2.进行部署操作
RepositoryService service = engine.getRepositoryService();
Deployment deploy = service.createDeployment()
.addClasspathResource("bpmn/evection.bpmn")
.addClasspathResource("bpmn/evection.png")
.name("出差申请流程")
.deploy();
// 3.输出信息测试
System.out.println(deploy.getId());
System.out.println(deploy.getName());
}
- 多文件部署
通过zip文件部署
流程定义部署后操作activiti中的三张表
act_re_deployment:流程定义部署表,每部署一次就增加一条记录
act_re_procdef:流程定义表,部署每个新的流程定义都会在这张表中增加一条记录
act_ge_bytearray:流程资源表,流程部署的bpmn文件和png图片会保存在该表中
启动流程实例
针对流程,启动一个流程表示发起一个新的出差申请单,相当于Java类和对象的关系
@Test
public void startProgress(){
//获取ProcessEngine
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
//获取运行service
RuntimeService runtimeService = engine.getRuntimeService();
//根据key去查询
String id = "evection";
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(id);
//输出测试
System.out.println(processInstance.getDeploymentId());
System.out.println(processInstance.getId());
System.out.println(processInstance.getActivityId());
}
任务查找
@Test
public void taskQuery(){
String assign = "zhangsan";
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = engine.getTaskService();
List<Task> list = taskService.createTaskQuery()
.processDefinitionKey("evection")
.taskAssignee(assign)
.list();
for (Task task : list) {
System.out.println(task.getProcessInstanceId());
System.out.println(task.getId());
System.out.println(task.getAssignee());
System.out.println(task.getName());
}
}
任务完成
@Test
public void taskComplete(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = engine.getTaskService();
Task task = taskService.createTaskQuery()
.processDefinitionKey("evection")
.taskAssignee("zhangsan")
.singleResult();
taskService.complete(task.getId());
}
流程定义的查询
@Test
public void getProDef(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
RepositoryService taskService = engine.getRepositoryService();
ProcessDefinitionQuery processDefinitionQuery = taskService.createProcessDefinitionQuery();
List<ProcessDefinition> list = processDefinitionQuery.processDefinitionKey("evection")
.orderByProcessDefinitionVersion()//安装版本排序
.desc()
.list();
for (ProcessDefinition processDefinition : list) {
System.out.println(processDefinition.getId());
System.out.println(processDefinition.getName());
System.out.println(processDefinition.getKey());
}
}
流程的删除
@Test
public void delete(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
RepositoryService service = engine.getRepositoryService();
//删除流程定义,如果已经有了流程实例启动则删除报错
service.deleteDeployment("1");//1是id,来自于act_re_deployment表
//删除流程定义,如果已经有了流程实例启动依旧删除,相当于级联删除
service.deleteDeployment("1",true);
}
流程资源的下载
使用jdbc下载或者是使用activiti的api,这里用后者
- 添加依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
- 编写代码