Activiti 6.x【2】activiti6.0 基本流程講解與開發前奏

基本流程講解與開發前奏


核心API介紹

這裏寫圖片描述
springboot環境下不再以activiti.cfg.xml文件的形式配置,可在yml內配置,yml配置會在後文講解。

RepositoryService:對流程定義進行管理。
RuntimeService:對流程實例的管理。
TaskService:對流程任務進行管理。
IdentityService:管理用戶和用戶組。
ManagementService:提供對activiti數據庫的直接訪問【一般不用】。
HistoryService:對流程的歷史數據進行操作。
FormService:動態表單。

Activiti6 YML配置

1.加入配置

spring: 
  activiti:
    database-schema-update: false
    check-process-definitions: false

activiti使用starter配置後屬於spring下。
check-process-definitions【檢查Activiti數據表是否存在及版本號是否匹配】默認爲true,自動創建好表之後設爲false。設爲false會取消自動部署功能。

database-schema-update【在流程引擎啓動和關閉時處理數據庫模式】如下(摘自官網)
- false (默認值):在創建流程引擎時檢查庫模式的版本,如果版本不匹配則拋出異常。
- true:在創建流程引擎時,執行檢查並在必要時對數據庫中所有的表進行更新,如果表不存在,則自動創建。
- create-drop:在創建流程引擎時,會創建數據庫的表,並在關閉流程引擎時刪除數據庫的表。

準備步驟

1.測試項目結構:主要爲做工作流部署的兩種形式,zip爲bpmn與png文件的壓縮文件
這裏寫圖片描述

2.安裝eclipse activiti插件
https://www.cnblogs.com/mingforyou/p/5347561.html【百度找了一個老哥的,這個就你們自己去倒騰了。難度不大】

3.流程圖如下
這裏寫圖片描述
代碼後續用到功能時會貼出

RepositoryService

這裏寫圖片描述
打開測試類
部署流程定義

/**部署流程定義*/
@Test
public void deploy(){
    Deployment deployment = repositoryService.createDeployment()//創建一個部署對象
                    .name("helloworld入門程序")
                    .addClasspathResource("bpmn/MyProcess.bpmn")//從classpath的資源中加載,一次只能加載一個文件
                    .addClasspathResource("bpmn/MyProcess.png")
                    .deploy();
    System.out.println("部署ID:"+deployment.getId());
    System.out.println("部署名稱:"+deployment.getName());
}

部署過程同時會影響三張表的數據

ACT_RE_DEPLOYMENT(第二行)
這裏寫圖片描述

ACT_GE_BYTEARRAY(文件會被存在這張表內,activiti以縱表方式存儲數據)
這裏寫圖片描述
ACT_RE_PROCDEF
這裏寫圖片描述

部署流程定義(zip)

/**部署流程定義(zip) */
@Test
public void deployzip() throws IOException{
    InputStream in = this.getClass().getClassLoader().getResourceAsStream("bpmn/MyProcess.zip");
    ZipInputStream zipInputStream = new ZipInputStream(in);
    Deployment deployment = repositoryService.createDeployment()
                    .name("helloworld入門程序2")
                    .addZipInputStream(zipInputStream)//指定zip格式的文件完成部署
                    .deploy();//完成部署
    System.out.println("部署ID:"+deployment.getId());
    System.out.println("部署名稱:"+deployment.getName());
    zipInputStream.close();
}

【PS:流程實例可以重複部署,有版本號作爲標識】
這裏寫圖片描述

刪除流程定義

/**刪除流程定義*/
@Test
public void deleteProcess(){

    String deploymentId = "25001";
    /**不帶級聯的刪除:只能刪除沒有啓動的流程,如果流程啓動,就會拋出異常*/
//     repositoryService.deleteDeployment(deploymentId);

    /**級聯刪除:不管流程是否啓動,都能可以刪除(emmm大概是一鍋端)*/
    repositoryService.deleteDeployment(deploymentId, true);
    System.out.println("刪除成功!");
}

RuntimeService

【多個流程實例之間不會相互影響】
注入Service這裏寫圖片描述

啓動流程實例

/**啓動流程實例*/
@Test
public void startProcessInstance(){
    //流程定義的key
    String processDefinitionKey = "myProcess";
    //key對應MyProcess.bpmn文件中id的屬性值,使用key值啓動,默認是按照最新版本的流程定義啓動
    ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefinitionKey);
    System.out.println("流程實例ID:"+pi.getId());//流程實例ID
    System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID
}

這裏寫圖片描述

查詢流程實例

/**查詢流程實例*/
@Test
public void searchProcessInstance(){
    String processDefinitionKey = "myProcess";
    ProcessInstance pi = runtimeService.createProcessInstanceQuery()
            .processDefinitionKey(processDefinitionKey)
            .singleResult();
    System.out.println("流程實例ID:"+pi.getId());
    System.out.println("流程定義ID:"+pi.getProcessDefinitionId());
}

這裏寫圖片描述

流程實例的刪除

/**流程實例的刪除*/
@Test
public void deleteProcessInstanceTest(){
    String processDefinitionKey = "myProcess";
    ProcessInstance pi = runtimeService.createProcessInstanceQuery()
            .processDefinitionKey(processDefinitionKey)
            .singleResult();
    String processInstanceId = pi.getProcessInstanceId();
    System.out.println("流程實例ID:"+pi.getId());
    runtimeService.deleteProcessInstance(processInstanceId,"刪除測試");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章