一、流程圖

二、示範代碼
package jiankunking.start;
import java.io.InputStream;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test;
public class StartTest
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**部署流程定義(從inputStream)*/
@Test
public void deploymentProcessDefinition_inputStream(){
InputStream inputStreamBpmn = this.getClass().getResourceAsStream("start.bpmn");
InputStream inputStreamPng = this.getClass().getResourceAsStream("start.png");
Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service
.createDeployment()//建立一個部署對象
.name("開始活動")//添加部署的名稱
.addInputStream("start.bpmn", inputStreamBpmn)//
.addInputStream("start.png", inputStreamPng)//
.deploy();//完成部署
System.out.println("部署ID:"+deployment.getId());//
System.out.println("部署名稱:"+deployment.getName());//
}
/**啟動流程執行個體+判斷流程是否結束+查詢曆史*/
@Test
public void startProcessInstance(){
//流程定義的key
String processDefinitionKey = "start";
ProcessInstance pi = processEngine.getRuntimeService()//與正在執行的流程執行個體和執行對象相關的Service
.startProcessInstanceByKey(processDefinitionKey);//使用流程定義的key啟動流程執行個體,key對應helloworld.bpmn檔案中id的屬性值,使用key值啟動,預設是按照最新版本的流程定義啟動
System.out.println("流程執行個體ID:"+pi.getId());//流程執行個體ID 101
System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID helloworld:1:4
/**判斷流程是否結束,查詢正在執行的執行對象表*/
ProcessInstance rpi = processEngine.getRuntimeService()//
.createProcessInstanceQuery()//建立流程執行個體查詢對象
.processInstanceId(pi.getId())
.singleResult();
//說明流程執行個體結束了
if(rpi==null){
/**查詢曆史,擷取流程的相關資訊*/
HistoricProcessInstance hpi = processEngine.getHistoryService()//
.createHistoricProcessInstanceQuery()//
.processInstanceId(pi.getId())//使用流程執行個體ID查詢
.singleResult();
System.out.println(hpi.getId()+" "+hpi.getStartTime()+" "+hpi.getEndTime()+" "+hpi.getDurationInMillis());
}
}
}