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

衣舞晨風發表於2016-09-11

一、流程圖

這裡寫圖片描述
二、演示程式碼

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


}

三、小結

1):結束節點沒有出口
2):其他節點有一個或多個出口。
如果有一個出口,則代表是一個單線流程
如果有多個出口,則代表是開啟併發流程

演示demo下載:http://download.csdn.net/detail/xunzaosiyecao/9627473

本文部分內容整理自itcast講義,在此表示感謝。
作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章