天天看點

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

版權聲明:轉載注明出處就OK的說,有些東西會轉載,都會注明的說= =如果有冒犯麻煩見諒 https://blog.csdn.net/Pan1458689676/article/details/82560185

基本流程講解與開發前奏

springboot環境下不再以activiti.cfg.xml檔案的形式配置,可在yml内配置,yml配置會在後文講解。

RepositoryService:對流程定義進行管理。

RuntimeService:對流程執行個體的管理。

TaskService:對流程任務進行管理。

IdentityService:管理使用者和使用者組。

ManagementService:提供對activiti資料庫的直接通路【一般不用】。

HistoryService:對流程的曆史資料進行操作。

FormService:動态表單。

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.流程圖如下

代碼後續用到功能時會貼出

打開測試類

部署流程定義

/**部署流程定義*/
@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("删除成功!");
}           

【多個流程執行個體之間不會互相影響】

注入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,"删除測試");
}