第10篇:Flowable-BPMN操作流程部署、启动

接上一篇:
第9篇:Flowable-Modeler集成以及集成代码下载
https://blog.csdn.net/weixin_40816738/article/details/102901208

文章目录

  • 一、背景
  • 二、方案设计
    • 2.1. 流程部署
    • 2.2. 模型的转换
    • 2.3. 启动流程
  • 三、BPMN业务流程文件
    • 3.1. 启动flowable-idm
    • 3.2. 启动flowable-modeler
    • 3.3. BPMNxml的内容
  • 四、服务
    • 4.1. 服务接口设计
    • 4.2. 部署服务实现
    • 4.3. 启动服务实现
    • 4.4. 部署控制器
    • 4.5. 启动控制器
    • 4.6. 部署创建流程验证
    • 4.7. 运行流程验证

一、背景

本文开始将陆续开始Flowable的API编程操作,慢慢掌握Flowable的常见API操作,参考博客
https://blog.csdn.net/weixin_40816738/article/details/102887854

二、方案设计

2.1. 流程部署

  • Flowable的流程部署通过仓库服务来完成部署,仓库服务的接口为RepositoryService。该接口通过创建DeploymentBuilder来完成部署

2.2. 模型的转换

  • 部署前我们编辑了一个普通的流程文件,需要加载下改文件来防止文件有错误,把文件转换为BPMNModel来校验,核心接口为BpmnXMLConverter,通过API接口convertToBpmnModel来实现xml到模型的转换

2.3. 启动流程

  • 加载完成流程后,我们将流程启动,Flowable的启动接口为runtimeService,运行时服务调用startProcessInstanceByKey启动一个流程,并且返回流程对象ProcessInstance。该对象包含ID,后续我们将经常用到该ID。

三、BPMN业务流程文件

还是使用简单流程来完成业务流程的学习,目前流程只包含一个开始节点/用户任务节点/结束节点。给用户任务节点配置一个分配人为admin.如下图所示:

3.1. 启动flowable-idm

 java -jar .\flowable-idm.war

启动如下图所示,默认端口8080:

http://localhost:8080/flowable-idm/

在这里插入图片描述

3.2. 启动flowable-modeler

在这里插入图片描述

http://localhost:8080/flowable-modeler/

在这里插入图片描述
在这里插入图片描述
注:删除权限验证证后,直接访问http://localhost:8080/flowable-modeler/即可

3.3. BPMNxml的内容

  • 如下:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef"><process id="test_bpmn" name="测试BPMN模型" isExecutable="true"><documentation>测试BPMN模型</documentation><startEvent id="start" name="开始"></startEvent><endEvent id="end" name="结束"></endEvent><userTask id="testUser" name="用户任务测试" flowable:assignee="admin"><extensionElements><modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><sequenceFlow id="sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002" sourceRef="start" targetRef="testUser"></sequenceFlow><sequenceFlow id="sid-AB59612A-1B33-4FB8-8758-5D773EDF9C44" sourceRef="testUser" targetRef="end"></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_test_bpmn"><bpmndi:BPMNPlane bpmnElement="test_bpmn" id="BPMNPlane_test_bpmn"><bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start"><omgdc:Bounds height="30.0" width="30.0" x="210.0" y="60.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end"><omgdc:Bounds height="28.0" width="28.0" x="525.0" y="61.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="testUser" id="BPMNShape_testUser"><omgdc:Bounds height="80.0" width="100.0" x="315.0" y="35.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002" id="BPMNEdge_sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002"><omgdi:waypoint x="239.94999779398907" y="75.0"></omgdi:waypoint><omgdi:waypoint x="315.0" y="75.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-AB59612A-1B33-4FB8-8758-5D773EDF9C44" id="BPMNEdge_sid-AB59612A-1B33-4FB8-8758-5D773EDF9C44"><omgdi:waypoint x="414.9499999999903" y="75.0"></omgdi:waypoint><omgdi:waypoint x="525.0" y="75.0"></omgdi:waypoint></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

四、服务

4.1. 服务接口设计

有了xml之后,我们设计web的服务层接口如下

package com.gblfy.service;import org.flowable.engine.runtime.ProcessInstance;import java.util.Map;/*** 流程服务类*/
public interface IFlowService {/*** 部署工作流*/Map<String,Object> createFlow(String filePath);/*** 启动工作流*/ProcessInstance strartFlow(String processKey, Map<String,Object> paras);
}

4.2. 部署服务实现

部署的代码实现如下,代码中我们加入了流程的校验:

@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("没有该流程");return  null;}return runtimeService.startProcessInstanceByKey(processKey,paras);}

4.3. 启动服务实现

启动服务实现如下,为了防止没有部署就去启动,加入了流程是否存在的检查:

@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("没有该流程");return  null;}return runtimeService.startProcessInstanceByKey(processKey,paras);}

4.4. 部署控制器

web入口设计简单,主要启动服务,并且返回服务的部署信息,具体实现如下:

@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\\测试BPMN模型2.bpmn20.xml";Map<String, Object> createRes = flowService.createFlow(flowPath);if (null == createRes) {res.put("msg", "创建流程失败");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", "创建流程成功");res.put("res", "1");return res;}

4.5. 启动控制器

启动控制器实现如下:

@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", "启动流程失败");res.put("res", "0");res.put("data", data);return res;}String processKey = paras.get("processKey");if (StringUtils.isEmpty(processKey)) {res.put("msg", "启动流程失败");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", "启动流程失败");res.put("res", "0");res.put("data", data);return res;}data.put("processId", processInstance.getId());res.put("msg", "启动流程成功");res.put("res", "1");res.put("data", data);return res;}

4.6. 部署创建流程验证

启动服务后,在浏览器中输入http://localhost:8989/flow/create验证如下:
在这里插入图片描述

4.7. 运行流程验证

输入http://localhost:8989/flow/start?processKey=test_bpmn验证如下:
在这里插入图片描述
Flowable部署启动流程完整代码下载
Gitlab链接:https://gitlab.com/gb-heima/flowablestudy/tree/master/flowablelech10
码云地址:https://gitee.com/gb_90/flowable-study/tree/master/flowablelech10

下一篇:
第11篇:Flowable-BPMN部署常见问题没有对ACT_RE_PROCDEF表进行插入操作
https://blog.csdn.net/weixin_40816738/article/details/102902524

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

那些年我们用过神级的代码注释

戳蓝字“CSDN云计算”关注我们哦&#xff01;来自&#xff1a;Blankj | 责编&#xff1a;乐乐链接&#xff1a;http://github.com/Blankj/awesome-comment正文 写在前面的话&#xff1a;一时兴起就收集了以下神注释&#xff0c;希望能为广大ITer带来快乐&#xff0c;缓解你们工…

AliOS Things 组件系统(uCube)

摘要&#xff1a; AliOS Things 是阿里巴巴提供的物联网操作系统&#xff0c;可以在不同的设备上运行不同的功能&#xff0c;甚至相同的设备运行不同的功能&#xff0c;AliOS Things 基于组件管理&#xff1a; 1、 组件功能单一&#xff0c;复用组件提供的功能&#xff0c;比如…

第11篇:Flowable-BPMN部署常见问题没有对ACT_RE_PROCDEF表进行插入操作

上一篇&#xff1a; 第10篇&#xff1a;Flowable-BPMN操作流程部署、启动 https://blog.csdn.net/weixin_40816738/article/details/102902348 文章目录一、问题描述二、问题定位三、解决方案四、验证结果一、问题描述 流程在部署的时候调用服务RepositoryService&#xff0c;…

AliOS Things lorawanapp应用介绍

摘要&#xff1a; 文本旨介绍AliOS Things的lorawanapp的示例&#xff0c;完成一个LoRaWAN网络的构建和数据传输&#xff0c;并通过该示例让大家对AliOS Things有一个初步的了解。 点此查看原文&#xff1a;http://click.aliyun.com/m/40591/ AliOS Things 是 AliOS 家族旗下的…

漫画:什么是最小生成树?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小灰来源 | 程序员小灰————— 第二天 —————————————————首先看看第一个例子&#xff0c;有下面这样一个带权图&#xff1a;它的最小生成树是什么样子呢&#xff1f;下图绿色加粗的边可以把所有顶点连…

一种基于AliOS Things的uData感知设备软件框架

摘要&#xff1a;   uData框架设计之初的思想是基于传统sensorhub概念基础之上的&#xff0c;结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架。 点此查看原文&#xff1a;http://click.aliyun.com/m/40592/ uData诞生背景uDat…

第12篇:Flowable-BPMN操作流程之用户任务UserTask

接上一篇&#xff1a; 第11篇&#xff1a;Flowable-BPMN部署常见问题没有对ACT_RE_PROCDEF表进行插入>操作 https://blog.csdn.net/weixin_40816738/article/details/102902524 文章目录一、定义二、常用配置三、参数赋值四、监听类实现五、BPMN配置六、验证6.1. 创建新流程…

通用智能传感集线器(Sensorhub)介绍

摘要&#xff1a;   智能传感集线器&#xff0c;也称之为Sensor hub&#xff0c;是一种基于低功耗MCU和轻量级RTOS操作系统之上的软硬件结合的解决方案&#xff0c;其主要功能是连接并处理来自各种传感器设备的数据。 点此查看原文&#xff1a;http://click.aliyun.com/m/405…

第13篇: Flowable-BPMN操作流程之流程进展查看之流程图

接上一篇&#xff1a; 第12篇&#xff1a;Flowable-BPMN操作流程之用户任务UserTask https://blog.csdn.net/weixin_40816738/article/details/102902596 文章目录一、背景二、原理三、实现方案3.1. 流程是否完成功能3.2. 完成流程图3.3. 控制器入口四、验证测试4.1. 创建流程4…

阿里云MaxCompute,用计算力让数据发声

摘要&#xff1a; 计算的价值绝不止计算本身&#xff0c;而是让本不会说话的数据发声。 从玛雅历法到圆周率&#xff0c;从万有引力定律到二进制&#xff0c;从固化的物体到虚拟的思维都由数据注入。阿里云大数据计算服务MaxCompute以技术驱动产品&#xff0c;用计算力让数据发…

命令行编译java项目_命令行编译运行java工程(转)

平时建立Java工程都是借助eclipse或intellij这些ide编辑器来构建&#xff0c;对于java工程的实际编译执行原理&#xff0c;从未了解过。作为一个曾经的C程序员&#xff0c;对于源码刨根问底的那份执着从未丢过。于是今天就写了这样的一个例子进行测试。1.首先建立个跟目录MyJav…

面试鹅厂,我三面被虐的体无完肤……

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | codegoose来源 | https://segmentfault.com/a/1190000017864721经过半年的沉淀&#xff0c;加上对MySQL&#xff0c;redis和分布式这块的补齐&#xff0c;终于重拾面试信心&#xff0c;再次出征。鹅厂面试职位&#xff1a;go…

阿里云MaxCompute印度开服,加速大数据产业升级

摘要&#xff1a; 2018年1月18日&#xff0c;阿里云大数据计算服务MaxCompute将在印度正式开服。通过MaxCompute强大的计算能力&#xff0c;阿里云将加速印度大数据产业的全面升级。 点此查看原文&#xff1a;http://click.aliyun.com/m/40728/ 2018年1月18日&#xff0c;阿里云…

第14篇:Flowable-BPMN操作流程之任务完成

接上一篇&#xff1a; 第13篇&#xff1a; Flowable-BPMN操作流程之流程进展查看之流程图 https://blog.csdn.net/weixin_40816738/article/details/102902629 文章目录一、背景二、原理三、API3.1. 直接完成任务3.2. 完成任务并且设置任务参数四、实现4.1. 接口4.2. 接口实现4…

java垃圾回收 分代_Java分代垃圾回收策略原理详解

一、为什么要分代分代的垃圾回收策略&#xff0c;是基于这样一个事实&#xff1a;不同的对象的生命周期是不一样的。因此&#xff0c;不同生命周期的对象可以采取不同的收集方式&#xff0c;以便提高回收效率。在Java程序运行的过程中&#xff0c;会产生大量的对象&#xff0c;…

MaxCompute Studio使用心得系列6——一个工具完成整个Python UDF开发

摘要&#xff1a; 2017/12/20 北京云栖大会上阿里云MaxCompute发布了最新的功能Python UDF&#xff0c;万众期待的功能终于支持啦&#xff0c;我怎么能不一试为快&#xff0c;今天就分享如何通过Studio进行Python udf开发。 点此查看原文&#xff1a;http://click.aliyun.com/m…

如何填报大数据相关专业? | Alfred数据室

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | AlfredWu来源 | Alfred数据室高考出分了&#xff0c;又是一年一度各位考生和家长手忙脚乱开始填报志愿的时候了。很多考生和家长纷纷咨询Alfred&#xff1a;大数据现在不是很火吗&#xff1f;大数据专业怎么样呀&#xff1f…

第15篇: Flowable-BPMN操作流程之排他网关

接上一篇&#xff1a; 第14篇&#xff1a;Flowable-BPMN操作流程之任务完成 https://blog.csdn.net/weixin_40816738/article/details/102902647 文章目录一、背景二、定义三、流程准备四、流程文件五、控制器六、流程通过验证6.1. 创建新流程6.2. 启动流程6.3. 控制台查看任务…

阿里云视频AI全能力解读

摘要&#xff1a; 结合人工智能视频理解流程和用户的需求场景&#xff0c;我们将视频AI的功能分成四个大部分&#xff0c;视频智能审核、视频内容理解、视频智能编辑、视频版权保护。其中视频审核功能包括视频鉴黄、暴恐涉政识别、广告二维码识别、无意义直播识别等&#xff0c…

阿里云智能视频 AI 重装来袭

摘要&#xff1a; 近日&#xff0c;阿里云重磅推出视频点播新功能——视频AI &#xff0c;基于深度学习、计算机视觉技术和海量数据&#xff0c;为广大用户提供多场景的视频AI服务。 点此查看原文&#xff1a;http://click.aliyun.com/m/40809/ 近日&#xff0c;阿里云重磅推出…