11.activiti工作流-開始活動節點

流程圖

這裏寫圖片描述

部署流程定義+啓動流程實例+查詢流程實例+查詢歷史流程實例

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):其他節點有一個或多個出口。
如果有一個出口,則代表是一個單線流程;
如果有多個出口,則代表是開啓併發流程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章