第10篇:Flowable-BPMN操作流程部署、启动
接上一篇:
第9篇:Flowable-Modeler集成以及集成代碼下載
https://blog.csdn.net/weixin_40816738/article/details/102901208
文章目錄
- 一、背景
- 二、方案設(shè)計(jì)
- 2.1. 流程部署
- 2.2. 模型的轉(zhuǎn)換
- 2.3. 啟動(dòng)流程
- 三、BPMN業(yè)務(wù)流程文件
- 3.1. 啟動(dòng)flowable-idm
- 3.2. 啟動(dòng)flowable-modeler
- 3.3. BPMNxml的內(nèi)容
- 四、服務(wù)
- 4.1. 服務(wù)接口設(shè)計(jì)
- 4.2. 部署服務(wù)實(shí)現(xiàn)
- 4.3. 啟動(dòng)服務(wù)實(shí)現(xiàn)
- 4.4. 部署控制器
- 4.5. 啟動(dòng)控制器
- 4.6. 部署創(chuàng)建流程驗(yàn)證
- 4.7. 運(yùn)行流程驗(yàn)證
一、背景
本文開(kāi)始將陸續(xù)開(kāi)始Flowable的API編程操作,慢慢掌握Flowable的常見(jiàn)API操作,參考博客
https://blog.csdn.net/weixin_40816738/article/details/102887854
二、方案設(shè)計(jì)
2.1. 流程部署
- Flowable的流程部署通過(guò)倉(cāng)庫(kù)服務(wù)來(lái)完成部署,倉(cāng)庫(kù)服務(wù)的接口為RepositoryService。該接口通過(guò)創(chuàng)建DeploymentBuilder來(lái)完成部署
2.2. 模型的轉(zhuǎn)換
- 部署前我們編輯了一個(gè)普通的流程文件,需要加載下改文件來(lái)防止文件有錯(cuò)誤,把文件轉(zhuǎn)換為BPMNModel來(lái)校驗(yàn),核心接口為BpmnXMLConverter,通過(guò)API接口convertToBpmnModel來(lái)實(shí)現(xiàn)xml到模型的轉(zhuǎn)換
2.3. 啟動(dòng)流程
- 加載完成流程后,我們將流程啟動(dòng),Flowable的啟動(dòng)接口為runtimeService,運(yùn)行時(shí)服務(wù)調(diào)用startProcessInstanceByKey啟動(dòng)一個(gè)流程,并且返回流程對(duì)象ProcessInstance。該對(duì)象包含ID,后續(xù)我們將經(jīng)常用到該ID。
三、BPMN業(yè)務(wù)流程文件
還是使用簡(jiǎn)單流程來(lái)完成業(yè)務(wù)流程的學(xué)習(xí),目前流程只包含一個(gè)開(kāi)始節(jié)點(diǎn)/用戶任務(wù)節(jié)點(diǎn)/結(jié)束節(jié)點(diǎn)。給用戶任務(wù)節(jié)點(diǎn)配置一個(gè)分配人為admin.如下圖所示:
3.1. 啟動(dòng)flowable-idm
java -jar .\flowable-idm.war啟動(dòng)如下圖所示,默認(rèn)端口8080:
http://localhost:8080/flowable-idm/3.2. 啟動(dòng)flowable-modeler
http://localhost:8080/flowable-modeler/
注:刪除權(quán)限驗(yàn)證證后,直接訪問(wèn)http://localhost:8080/flowable-modeler/即可
3.3. BPMNxml的內(nèi)容
- 如下:
四、服務(wù)
4.1. 服務(wù)接口設(shè)計(jì)
有了xml之后,我們?cè)O(shè)計(jì)web的服務(wù)層接口如下
package com.gblfy.service;import org.flowable.engine.runtime.ProcessInstance;import java.util.Map;/*** 流程服務(wù)類*/ public interface IFlowService {/*** 部署工作流*/Map<String,Object> createFlow(String filePath);/*** 啟動(dòng)工作流*/ProcessInstance strartFlow(String processKey, Map<String,Object> paras); }4.2. 部署服務(wù)實(shí)現(xiàn)
部署的代碼實(shí)現(xiàn)如下,代碼中我們加入了流程的校驗(yàn):
@Override public ProcessInstance strartFlow(String processKey, Map<String, Object> paras) {if (StringUtils.isEmpty(processKey)){return null;}if (null == paras){paras = new HashMap<>();}Deployment deployment = repositoryService.createDeploymentQuery().processDefinitionKey(processKey).singleResult();if (deployment == null){log.error("沒(méi)有該流程");return null;}return runtimeService.startProcessInstanceByKey(processKey,paras);}4.3. 啟動(dòng)服務(wù)實(shí)現(xiàn)
啟動(dòng)服務(wù)實(shí)現(xiàn)如下,為了防止沒(méi)有部署就去啟動(dòng),加入了流程是否存在的檢查:
@Override public ProcessInstance strartFlow(String processKey, Map<String, Object> paras) {if (StringUtils.isEmpty(processKey)){return null;}if (null == paras){paras = new HashMap<>();}Deployment deployment = repositoryService.createDeploymentQuery().processDefinitionKey(processKey).singleResult();if (deployment == null){log.error("沒(méi)有該流程");return null;}return runtimeService.startProcessInstanceByKey(processKey,paras);}4.4. 部署控制器
web入口設(shè)計(jì)簡(jiǎn)單,主要啟動(dòng)服務(wù),并且返回服務(wù)的部署信息,具體實(shí)現(xiàn)如下:
@RequestMapping("/create")@ResponseBodypublic Map<String, Object> createFlow() {Map<String, Object> res = new HashMap<>();Map<String, Object> data = new HashMap<>();String flowPath ="C:\\Users\\gblfy\\Desktop\\Workflow\\flowablestudy\\flowablelech10\\src\\main\\resources\\processes\\測(cè)試BPMN模型2.bpmn20.xml";Map<String, Object> createRes = flowService.createFlow(flowPath);if (null == createRes) {res.put("msg", "創(chuàng)建流程失敗");res.put("res", "0");res.put("data", data);return res;}List<Process> processes = (List<Process>) createRes.get("processes");ArrayList<String> ids = new ArrayList<>();for (Process process : processes) {ids.add(process.getId());}data.put("processKeys", ids);data.put("deployId", ((Deployment) createRes.get("deployment")).getId());res.put("data", data);res.put("msg", "創(chuàng)建流程成功");res.put("res", "1");return res;}4.5. 啟動(dòng)控制器
啟動(dòng)控制器實(shí)現(xiàn)如下:
@RequestMapping("/start")@ResponseBodypublic Map<String, Object> startFlow(@RequestBody @RequestParam(required = false) Map<String, String> paras) {Map<String, Object> res = new HashMap<>();Map<String, String> data = new HashMap<>();if (MapUtils.isEmpty(paras)) {res.put("msg", "啟動(dòng)流程失敗");res.put("res", "0");res.put("data", data);return res;}String processKey = paras.get("processKey");if (StringUtils.isEmpty(processKey)) {res.put("msg", "啟動(dòng)流程失敗");res.put("res", "0");res.put("data", data);return res;}Map<String, Object> flowParas = new HashMap<>();flowParas.putAll(paras);ProcessInstance processInstance = flowService.strartFlow(processKey, flowParas);if (null == processInstance) {res.put("msg", "啟動(dòng)流程失敗");res.put("res", "0");res.put("data", data);return res;}data.put("processId", processInstance.getId());res.put("msg", "啟動(dòng)流程成功");res.put("res", "1");res.put("data", data);return res;}4.6. 部署創(chuàng)建流程驗(yàn)證
啟動(dòng)服務(wù)后,在瀏覽器中輸入http://localhost:8989/flow/create驗(yàn)證如下:
4.7. 運(yùn)行流程驗(yàn)證
輸入http://localhost:8989/flow/start?processKey=test_bpmn驗(yàn)證如下:
Flowable部署啟動(dòng)流程完整代碼下載
Gitlab鏈接:https://gitlab.com/gb-heima/flowablestudy/tree/master/flowablelech10
碼云地址:https://gitee.com/gb_90/flowable-study/tree/master/flowablelech10
下一篇:
第11篇:Flowable-BPMN部署常見(jiàn)問(wèn)題沒(méi)有對(duì)ACT_RE_PROCDEF表進(jìn)行插入操作
https://blog.csdn.net/weixin_40816738/article/details/102902524
總結(jié)
以上是生活随笔為你收集整理的第10篇:Flowable-BPMN操作流程部署、启动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Vue 项目预热
- 下一篇: 工作流实战篇_01_flowable 流