【一】
創(chuàng)建java工程,導(dǎo)入jar包
activiti相關(guān)jar(可以去activiti資源中案例中獲取)
mysql驅(qū)動(dòng)包
【二】
插件定義流程文件(png、bpmn)并導(dǎo)入
【三】
添加配置
activiti配置
log4j配置
activiti-context.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 流程引擎配置對(duì)象 -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3307/activiti_db"/>
<property name="jdbcUsername" value="root"/>
<property name="jdbcPassword" value="123"/>
<property name="databaseSchemaUpdate" value="true"/>
</bean>
<!-- 使用工廠創(chuàng)建流程引擎對(duì)象 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration"/>
</bean>
</beans>
大體架構(gòu)圖

2017-08-30_174618.png
【API操作】
package com.itheima.activiti;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.zip.ZipInputStream;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
public class ActivitiAPITest {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定義
* 方式一:加載單個(gè)的流程定義文件
* 方式二:加載zip文件
*
* 執(zhí)行部署流程定義,程序會(huì)操作以下三張表
* act_re_deployment(部署表)
* act_re_procdef(流程定義表)
* act_ge_bytearray(二進(jìn)制表)
* @throws FileNotFoundException
*/
@Test
public void test1() throws FileNotFoundException {
//創(chuàng)建部署構(gòu)建器對(duì)象
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
// 方式一:加載單個(gè)的流程定義文件
// deploymentBuilder.addClasspathResource("qjlc.bpmn");
// deploymentBuilder.addClasspathResource("qjlc.png");
// Deployment deployment = deploymentBuilder.deploy();
//
// System.out.println(deployment.getId());
//將zip文件轉(zhuǎn)換為輸入流
ZipInputStream zipInputStream = new ZipInputStream(this.getClass().getClassLoader().getResourceAsStream("process.zip"));
// 方式二:加載zip文件
//ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File("d:\\process.zip")));
deploymentBuilder.addZipInputStream(zipInputStream );
Deployment deployment = deploymentBuilder.deploy();
System.out.println(deployment.getId());
}
/**
* 刪除流程定義
*/
@Test
public void test2(){
String deploymentId = "101";//部署id
boolean cascade = true;//級(jí)聯(lián)刪除
processEngine.getRepositoryService().deleteDeployment(deploymentId, cascade);
}
/**
* 查詢流程定義
processEngine.getRepositoryService().createDeploymentQuery().list();
processEngine.getRuntimeService().createProcessInstanceQuery().list();
processEngine.getTaskService().createTaskQuery().list();
processEngine.getIdentityService().createUserQuery().list();
processEngine.getHistoryService().createHistoricActivityInstanceQuery().list();
*
*/
/**
* 查詢流程定義 1
*/
@Test
public void test3(){
ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
List<ProcessDefinition> list = query.list(); //直接查詢所有
//設(shè)置條件
// query.processDefinitionKey("qjlc");//根據(jù)key過濾
// query.orderByProcessDefinitionVersion().asc();
// List<ProcessDefinition> list = query.listPage(0, 10);
for (ProcessDefinition processDefinition : list) {
System.out.println(processDefinition.getId() + " " + processDefinition.getName());
}
}
/**
* 查詢部署對(duì)應(yīng)的流程定義文件名稱和輸入流(根據(jù)部署id)
* @throws FileNotFoundException
*/
@Test
public void test4() throws Exception{
String deploymentId = "201";//部署id
List<String> names = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
for (String name : names) {
InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name);
/*byte[] b = new byte[1024];
in.read(b);
outputStream.write(b);*/
FileUtils.copyInputStreamToFile(in, new File("d:\\"+name));
in.close();
}
}
/**
* 查詢部署對(duì)應(yīng)的流程定義輸入流(根據(jù)流程定義id)
* @throws FileNotFoundException
*/
@Test
public void test5() throws Exception{
String processDefinitionId = "qjlc:6:904";//流程定義id
InputStream pngStream = processEngine.getRepositoryService().getProcessDiagram(processDefinitionId);
FileUtils.copyInputStreamToFile(pngStream, new File("d:\\abc.png"));
}
/**
* 根據(jù)流程定義啟動(dòng)流程實(shí)例
* 方式一:根據(jù)流程定義id啟動(dòng)流程實(shí)例
* 方式二:根據(jù)流程定義key啟動(dòng)流程實(shí)例(建議)-----可以根據(jù)當(dāng)前最新版本的流程定義啟動(dòng)流程實(shí)例
*
* 啟動(dòng)流程實(shí)例,操作了兩張表
* act_ru_execution(流程實(shí)例表)
* act_ru_task(任務(wù)表)
*/
@Test
public void test6() throws Exception{
//方式一:根據(jù)流程定義id啟動(dòng)流程實(shí)例
//String processDefinitionId = "qjlc:2:104";//流程定義id
//processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);
String processDefinitionKey = "qjlc";
//方式二:根據(jù)流程定義key啟動(dòng)流程實(shí)例
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance.getId() + " " + processInstance.getProcessDefinitionId());
}
/**
* 查詢流程實(shí)例
*/
@Test
public void test7() throws Exception{
List<ProcessInstance> list = processEngine.getRuntimeService().createProcessInstanceQuery().list();
for (ProcessInstance processInstance : list) {
System.out.println(processInstance.getId());
}
}
/**
* 刪除流程實(shí)例
*/
@Test
public void test8() throws Exception{
String processInstanceId = "1201";//流程實(shí)例id
String deleteReason = "不請(qǐng)假了";//刪除原因
processEngine.getRuntimeService().deleteProcessInstance(processInstanceId , deleteReason );
}
/**
* 查詢個(gè)人任務(wù)
*/
@Test
public void test9() throws Exception{
TaskQuery query = processEngine.getTaskService().createTaskQuery();
query.taskAssignee("張三");
query.orderByTaskCreateTime().desc();
List<Task> list = query.list();
for (Task task : list) {
System.out.println(task.getId() + " " + task.getName());
}
}
/**
* 辦理個(gè)人任務(wù)
*/
@Test
public void test10() throws Exception{
String taskId = "1304";
processEngine.getTaskService().complete(taskId);
}
}
6.API總結(jié)
6.1
幾個(gè)接口(和表有對(duì)應(yīng)關(guān)系):
Deployment------act_re_deployment
ProcessDefinition-----act_re_procdef
ProcessInstance------act_ru_execution
Task-----act_ru_task
6.2
幾個(gè)Query對(duì)象
DeploymentQuery------act_re_deployment
ProcessDefinitionQuery-----act_re_procdef
ProcessInstanceQuery------act_ru_execution
TaskQuery-----act_ru_task
6.3
幾個(gè)Service
RepositoryService----操作部署表、流程定義表等靜態(tài)資源信息表
RuntimeService----操作流程實(shí)例表、任務(wù)表等動(dòng)態(tài)信息表
TaskService-----操作任務(wù)表
HistoryService----操作歷史表
IdentityService----操作用戶表、組表、關(guān)系表