Activiti6--[5] 核心API方法

API方法說明

流程模型操作

一般先定義一個流程模型,也就是通過界面拖拉拽一個圖形流程出來,然後保存。這個數據就是流程模型數據

創建模型

repositoryService.newModel()
....
repositoryService.saveModel()

分頁查詢模型

repositoryService.createModelQuery().listPage(firstResult,maxResults)
// 查詢總數
repositoryService.createModelQuery().count()  

刪除模型

repositoryService.deleteModel()

部署模型

repository.createDeployment().name().deploy();

流程定義操作

通過zip部署流程

@Test
public void deployProcessByZip() throws FileNotFoundException {
    // 流程部署 參與的表 act_re_procdef  act_ge_bytearry act_re_deployment
    // 加斜槓代表從classpah的根目錄裏面找文件
    InputStream inputStream = this.getClass().getResourceAsStream("/processes/processes.zip");
    // 部署流程
    ZipInputStream zipInputStream = new ZipInputStream(inputStream);
    // 保存act_re_deployment
    Deployment deployment = repositoryService.createDeployment()
            .name("請假流程009")
            .addZipInputStream(zipInputStream)
            .deploy();

    System.out.println("部署成功,流程部署id:" + deployment.getId());//57501
}

分頁查詢流程部署信息

@Test
public void queryDeployment(){
  List<Deployment> deployments = repositoryService.createDeploymentQuery().listPage(0, 4);
  for (Deployment deployment : deployments) {
    System.out.println("部署id:"+deployment.getId());
    System.out.println("部署名稱:"+deployment.getName());
    System.out.println("部署時間:"+deployment.getDeploymentTime());
  }
}

分頁查詢流程定義信息

@Test
public void  queryProcessDef(){
  List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().listPage(0, 4);
  for (ProcessDefinition processDefinition : processDefinitions) {
    System.out.println("流程定義id:"+processDefinition.getId());
    System.out.println("流程定義名稱:"+processDefinition.getName());
    System.out.println("流程定義bmp:"+processDefinition.getResourceName());
    System.out.println("流程定義png:"+processDefinition.getDiagramResourceName());
    System.out.println("部署id:"+processDefinition.getDeploymentId());
    System.out.println("流程定義版本:"+processDefinition.getVersion());
  }
}

刪除流程部署信息

同時刪除流程定義

@Test
public void deleteDeploy(){
  // 根據部署id刪除流程定義,如果當前部署id有對應的流程定義運行的流程實例運行,那麼會報錯
  repositoryService.deleteDeployment("1");
  // 級聯刪除表,會刪除正在執行的流程數據以及act_ru_*和act_hi_*裏面的數據
  // repositoryService.deleteDeployment("1",true);
}

查詢流程定義圖片

@Test
public void queryProcessDragram() throws Exception {
    //根據流程定義id查詢流程定義的圖片
    InputStream processDiagram = repositoryService.getProcessDiagram("helloWorld:1:4");
    File file = new File("./demo.png");
    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file));
    int len = 0;
    byte[] bys = new byte[1024];
    while((len = processDiagram.read(bys))!=0){
        bufferedOutputStream.write(bys,0,len);
        bufferedOutputStream.flush();
    }
    bufferedOutputStream.close();
    processDiagram.close();
    System.out.println("輸出預覽流程定義圖片");
}

1.4.3 流程實例、任務操作

流程模型部署以後,對應生成流程定義。

一次部署,可以產生多條流程定義;

對應的表是act_re_deployment、 act_re_procdef

啓動流程

@Test
public void startProcessDef() {
  // (1)通過processInstanceId啓動
  //ProcessInstance processInstance = runtimeService.startProcessInstanceById();
  // (2) 通過processInstanceKey啓動
  ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("helloWorld");
  // (3)設置業務主鍵並通過processInstanceId啓動流程,(重要,業務id)
  // ProcessInstance startProcessInstanceById(String processDefinitionId, String businessKey);
  // 獲取流程實例id
  System.out.println("流程實例id:" + processInstance.getId());
}

查詢個人任務

@Test
public void queryTask(){
  // 分頁查詢張三需要辦理的業務
  List<Task> tasks = taskService.createTaskQuery().taskCandidateOrAssigned("張三").listPage(0, 4);
  for (Task task : tasks) {
    System.out.println("任務id:"+task.getId());
    System.out.println("任務名稱:"+task.getName());
    System.out.println("任務辦理人:"+task.getAssignee());
    System.out.println("流程定義id:"+task.getProcessDefinitionId());
    System.out.println("流程實例id:"+task.getProcessInstanceId());
    System.out.println("執行實例id:"+task.getExecutionId());
  }
}

辦理任務

@Test
public void completeTask(){
  // 完成任務id爲12505的任務
  taskService.complete("12505");
}

判斷流程是否結束

@Test
public void isComplete(){
    //判斷流程實例對象是否還存在,不存在則已經結束
    //備註:流程中所有任務完成後,流程實例表中的該流程數據全部會刪除,則查詢該流程實例返回的應該是空對象。
    ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery().processInstanceId("12501");
    if(processInstanceQuery!=null){
        System.out.println("流程未結束");
    }else{
        System.out.println("流程已結束");
    }
}

分頁查詢正在執行的流程

@Test
public void queryRunningProcessInstance(){
  // 分頁查詢流程實例
  List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery().listPage(0, 4);
  for (ProcessInstance processInstance : processInstances) {
    System.out.println("執行實例id:"+processInstance.getId());
    System.out.println("流程定義id:"+processInstance.getProcessDefinitionId());
    System.out.println("流程部署id:"+processInstance.getDeploymentId());
  }
}

查詢歷史流程實例

 @Test
public void queryHisotyProcess(){
  List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery().listPage(0, 4);
  for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
    System.out.println("執行實例id:"+historicProcessInstance.getId());
    System.out.println("流程定義id:"+historicProcessInstance.getProcessDefinitionId());
    System.out.println("部署id:"+historicProcessInstance.getDeploymentId());
    System.out.println("流程定義名稱:"+historicProcessInstance.getProcessDefinitionName());
    System.out.println("流程定義版本:"+historicProcessInstance.getProcessDefinitionVersion());
  }
}

查詢歷史流程任務

/**
 * 查詢歷史流程任務
 */
@Test
public void queryHistoryTask(){
    List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().list();
    for (HistoricTaskInstance historicTaskInstance : list) {
        System.out.println("任務id:"+historicTaskInstance.getId());
        System.out.println("任務名稱:"+historicTaskInstance.getName());
        System.out.println("辦理人:"+historicTaskInstance.getAssignee());
        System.out.println("執行實例id:"+historicTaskInstance.getExecutionId());
        System.out.println("流程定義id:"+historicTaskInstance.getProcessDefinitionId());
        System.out.println("流程實例id:"+historicTaskInstance.getProcessInstanceId());
        System.out.println("任務創建時間:"+historicTaskInstance.getCreateTime());
        System.out.println("任務持續:"+historicTaskInstance.getDurationInMillis());
        System.out.println(">>>>>>>>>>");
    }
}

流程變量操作

啓動流程並設置變量

@Test
public void startProcessAndSetVariable() {
    Map<String, Object> map = new HashMap<>(10);
    map.put("請假天數", 5);
    // 通過流程定義id啓動流程並設置流程變量
    // runtimeService.startProcessInstanceById("helloWorld:1:4",map);
    // 通過流程定義key啓動流程並設置流程變量
    runtimeService.startProcessInstanceByKey("helloWorld", map);
    
}

通過執行實例id設置變量

@Test
  public void runSetVariableByExecutionId(){
    Map<String, Object> map = new HashMap<>(10);
    map.put("請假天數", 10);
    runtimeService.setVariables("17503",map);

}

通過任務id設置變量

@Test
public void setVariableByTaskId(){
    Map<String, Object> map = new HashMap<>(10);
    map.put("請假原因", "病假");
    taskService.setVariables("17506",map);
}

獲取變量值

@Test
public void getVariable(){
    //通過執行實例id和key獲取流程變量請假原因的值
    String reason = (String)runtimeService.getVariable("17501","請假原因");
    System.out.println(reason);
}

查詢歷史的流程變量

@Test
public void getVariableByHistory(){
  // 通過執行實例id
    List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().executionId("17501").list();
    for (HistoricVariableInstance historicVariableInstance : list) {
        System.out.println("變量名稱:"+historicVariableInstance.getVariableName());
        System.out.println("變量值:"+historicVariableInstance.getValue());
    }
}

歷史流程操作

分頁查詢歷史流程實例

@Test
public void queryHistoryProcess(){
    List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery()
            //查詢已完成的
            .finished()
            .processDefinitionId("helloWorld:1:4")
            .orderByProcessInstanceDuration().desc()
            .listPage(0, 10);

    for (HistoricProcessInstance historicProcessInstance : list) {
        System.out.println("歷史流程實例id:"+historicProcessInstance.getId());
         System.out.println("流程定義id:"+historicProcessInstance.getProcessDefinitionId());
        System.out.println("部署id:"+historicProcessInstance.getDeploymentId());
        System.out.println("開始節點id:"+historicProcessInstance.getStartActivityId());
        System.out.println("結束節點id:"+historicProcessInstance.getEndActivityId());
        System.out.println("結束時間:"+historicProcessInstance.getEndTime());
        System.out.println("耗費時間:"+historicProcessInstance.getDurationInMillis());
        System.out.println("====================");
    }
}

查詢歷史活動

@Test
public void queryHistoryActiviti() {
    List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery()
            .processDefinitionId("helloWorld:1:4")
            .finished()
            .orderByHistoricActivityInstanceEndTime()
            .desc()
            .listPage(0, 10);

    for (HistoricActivityInstance historicActivityInstance : list) {
        System.out.println("id:" + historicActivityInstance.getId());
        System.out.println("流程執行:" + historicActivityInstance.getExecutionId());
        System.out.println("流程定義id:" + historicActivityInstance.getProcessDefinitionId());
        System.out.println("流程實例id:" + historicActivityInstance.getProcessInstanceId());
        System.out.println("活動id:" + historicActivityInstance.getActivityId());
        System.out.println("活動類型:" + historicActivityInstance.getActivityType());
        System.out.println("活動名稱:" + historicActivityInstance.getActivityName());
        System.out.println("辦理人:" + historicActivityInstance.getAssignee());
        System.out.println("開始時間:" + historicActivityInstance.getStartTime());
        System.out.println("結束時間:" + historicActivityInstance.getEndTime());
        System.out.println("持續時間:" + historicActivityInstance.getDurationInMillis());
        System.out.println("==========================");
    }
}

查詢歷史任務

@Test
public void queryHistoryTask(){
  // 查詢劉備曾經辦理的任務
    List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
            .finished()
            .taskAssignee("劉備")
            .listPage(0, 10);
    for (HistoricTaskInstance historicTaskInstance : list) {
        System.out.println("任務id:"+historicTaskInstance.getId());
        System.out.println("任務名稱:"+historicTaskInstance.getName());
        System.out.println("辦理人:"+historicTaskInstance.getAssignee());
        System.out.println("創建時間:"+historicTaskInstance.getCreateTime());
        System.out.println("結束時間:"+historicTaskInstance.getEndTime());
        System.out.println("流程實例id:"+historicTaskInstance.getProcessInstanceId());
        System.out.println("流程定義id:"+historicTaskInstance.getProcessDefinitionId());
        System.out.println("執行實例id:"+historicTaskInstance.getExecutionId());
        System.out.println("持續時間:"+historicTaskInstance.getDurationInMillis());
        System.out.println("=======================");
    }
}

參考說明

https://www.activiti.org/userguide/#chapterApi

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