記Activiti入門使用-2 流程繪制、導入及開始一個流程


一、流程繪制與導入

百度啥的找了好多bpmn繪制工具,都不盡如人意,大多數都不能編輯網關出口的跳轉條件,最后還是選擇了activiti官方的那個繪圖的app。。。

啥都好,就是線不能彎,很難受。(后來開發的時候驚訝地發現了方法,雖然感覺操作不是很友好)

要是有好用的希望大家能夠推薦一下~

官網:https://www.activiti.org/get-started

下面Old Version選擇6.x Download,下載完成后是一個zip包,解壓后把里面的activiti-app.war丟到tomcat下面啟動就行,這邊使用tomcat8.5.49,該war包需要java1.8。

(這邊用idea直接起war包好像會遇到一系列問題,主要是contentPath會變,所以還是直接丟到tomcat下面吧)。

1、

啟動后訪問:http://localhost:8080/activiti-app/#/會跳轉到登錄頁,默認賬號:admin/test即可,登陸后界面如下,選擇第一個:

 

2、

然后選擇Create Process

 

3、

新建頁面如下:

Model name為流程名稱(可重復)

Model key為流程Key,實際調用中使用的即為該key,似乎key可以相同,但是后面創建的會有版本號的概念,會自動+1

 

4、

畫圖就完事了,繪圖規則可以自行了解bpmn

 

5、

保存后選擇下載,放入工程目錄/resources/processes下,修改后綴為bpmn,其實應該是可以直接解析bpmn20.xml文件的來着,具體的還在學習~

啟動項目出現:The following process definition files will be deployed: [***.bpmn]即說明流程部署成功。

 

二、如何開始一個流程

我們以上圖的流程為例,這邊先提幾個關鍵的service類

2.1 服務接口

 

1、TaskService

  在流程進行過程中,每個節點的操作方法,經常用的比如:查詢處於“領導審批”這個節點的任務,完成這個任務等等。

2、RuntimeService

  流程相關服務,基本的功能例如:開始一個實例流程等等。

3、RepositoryService

  流程部署相關的服務

4、HistoryService

  歷史流程相關的服務

2.2 開始流程

  如上所說,開始流程我們需要用到RuntimeService這個類。

  直接上代碼:

    @PostMapping(value = "/start")
    @ResponseBody
    @ApiOperation(value = "啟動某個流程")
    public String start(@RequestParam String instanceKey) {
        // map中放入該流程需要的業務數據
        Map<String, Object> map = new HashMap<>();
        map.put("createUser", "Test");
        map.put("createTime", 1576206360000L);
        ProcessInstance instance = runtimeService.startProcessInstanceByKey(instanceKey, map);
        return instance.getId();
    }

  調用runtimeService.startProcessInstanceByKey(),根據部署的流程key來啟動一個流程,RuntimeService里面也有很多根據其他標識啟動流程的方法,具體還需要研究。

  其中instanceKey對應項目啟動時日志中部署的流程key,也就是bpmn文件中該行的id。

  <process id="myFirstBpmn" name="myFirstBpmn" isExecutable="true">

  根據方法返回的id觀察數據庫,可以發現很多表里面都會新建以該id為主鍵的數據,該條id也可以用來標識一條流程實例。

 

2.3 查詢流程

  流程的最基礎的查詢也需要用到RuntimeService這個類:

    @PostMapping(value = "/list")
    @ResponseBody
    @ApiOperation(value = "查詢某個流程實例")
    public List<String> list(@RequestParam String definitionKey) {
        // 創建查詢條件
        ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
        // 根據流程實例key來查詢,即查詢該流程有多少個正在進行的實例
        List<ProcessInstance> runningList = processInstanceQuery.processDefinitionKey(definitionKey).list();
        // 返回實例的id,這邊需要包裝成自己需要的業務數據返回
        List<String> ids = new ArrayList<>();
        runningList.forEach(list -> ids.add(list.getId()));
        return ids;
    }

  這邊是根據2.2中的key來查詢實例,實際觀察該類里面的方法,可以發現很多的其他查詢條件。

  這邊如果直接返回List<ProcessInstance>會報懶加載的一些錯誤,所以還是自己封裝一遍比較好,里面不需要的字段也比較多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM