流程圖
部署流程定義+啓動流程實例+查詢流程實例+查詢歷史流程實例
package i_start;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.activiti.engine.task.Task;
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()//
.processDefinitionId(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());
}
}
}
總結
1):結束節點沒有出口
2):其他節點有一個或多個出口。
如果有一個出口,則代表是一個單線流程;
如果有多個出口,則代表是開啓併發流程。