天天看點

Activiti 學習筆記十:開始活動節點(判斷流程是否結束及查詢曆史)

一、流程圖

Activiti 學習筆記十:開始活動節點(判斷流程是否結束及查詢曆史)

二、示範代碼

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());
        }
    }


}      

三、小結