package com.activiti.study.helloworld;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
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.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test;
public class b_ProcessDefinition {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@Test
public void testDeploymentProcessDefinition(){
//得到倉庫對象Service
Deployment deployment = processEngine.getRepositoryService()
.createDeployment()
.name("activitiStudy")
//起始位置不要增加/
.addClasspathResource("diagrams/MyProcess.bpmn")
.addClasspathResource("diagrams/MyProcess.png")
.deploy();
System.out.println("Name: " + deployment.getName());
System.out.println("Id: " + deployment.getId());
}
/**
* 從zip文件創建存儲流程定義
*/
@Test
public void testDeploymentProcessDefinition_zip(){
InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip"); //反斜槓
ZipInputStream paramZipInputStream = new ZipInputStream(in);
Deployment deployment = processEngine.getRepositoryService()
.createDeployment()
.name("zipDe")
.addZipInputStream(paramZipInputStream)
.deploy();
System.out.println("Name: " + deployment.getName());
System.out.println("Id: " + deployment.getId());
}
/**
* 查詢流程定義
*/
@Test
public void testQueryProcessDefinition(){
ProcessDefinitionQuery processDefinitionQuery = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.deploymentId("701");
System.out.println(processDefinitionQuery.orderByDeploymentId().desc().list());;
}
/**
* 啓動流程
*/
@Test
public void testStartProcess(){
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey("helloworld");
System.out.println("Id: " + processInstance.getActivityId());
System.out.println("BussinessKey: " + processInstance.getBusinessKey());
}
/**
* 刪除流程定義
*/
@Test
public void testDeleteProcessDefinition_inRunTime(){
processEngine.getRuntimeService().startProcessInstanceByKey("helloworld");
//不能刪除啓動的流程 會拋出異常
processEngine.getRepositoryService().deleteDeployment("701");
}
@Test
public void testDeleteProcessDefinition_Cascade(){
processEngine.getRuntimeService().startProcessInstanceByKey("helloworld");
//不能刪除啓動的流程 會拋出異常
processEngine.getRepositoryService().deleteDeployment("701",true);
}
/**
* 查詢最新流程定義
*/
@Test
public void testFindLastestVersionProcessDefination(){
List<ProcessDefinition> list = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.orderByProcessDefinitionVersion()
.asc().list();
//放入Map 中
Map<String,ProcessDefinition> map = new LinkedHashMap<>();
for(ProcessDefinition pd: list){
map.put(pd.getKey(), pd);
}
List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values());
System.out.println("===========================");
for(ProcessDefinition pd : pdList){
System.out.println(pd.getDeploymentId());
}
System.out.println("===========================");
}
}
activiti.cfg.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">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
<property name="jdbcPassword" value="123456"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db_activiti"></property>
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUsername" value="root"></property>
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
</beans>