camunda 应用实践

  • 使用camunda作后端接口编排
    • 前端改造
    • 后端驱动
    • 代码实现 & 效果展示

使用camunda作后端接口编排

我们在使用camnuda作为后端接口编排组件后,在实际开发应用中遇到了不少问题,在此做一些总结,供后期查阅

前端改造

camunda 官方提供了流程图绘制客户端,但是由于我们是B/S系统所以需要将流程设计器集成到网页端,于是我们使用vue3+ts结合bpmn.js做了对camunda属性面板改造,实现如下功能:

  1. vue3+ts+bpmn.js ,将camunda流程设计器集成到网页端;
  2. 使用bpmn2.0中的服务任务 + 网关 + 流转条件实现接口编排;
  3. 使用bpmn2.0中的事物子流程 + 边界异常事件 + 取消事件 + 补偿节点实现分布式事务控制;

后端驱动

使用camunda流程引擎api实现流程初始化,部署,实例启动等:

  1. 利用代理表达式 ,实现对流程设计器中配置的接口进行触发调用;
  2. 使用监听器实现流程返回结果处理;

代码实现 & 效果展示

首先前端引入bpmn.js依赖

npm i bpmn-js --save

引入camuda.json标准和国际化文件

编写modeler代码

import './modeler.css';
import 'bpmn-js/dist/assets/diagram-js.css';
import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css';
import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css';
import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css';
import 'diagram-js-minimap/assets/diagram-js-minimap.css'import { defineComponent, onMounted } from 'vue';
import createDefaultBpmnXml from '../../../bpmn/defaultBpmnXml';
import camoundaModdel from '../../../bpmn/resources/camunda.json';
import translate from '../../../bpmn/i18n';
import { BpmnStore } from '../../../bpmn/store';
import minimapModule from 'diagram-js-minimap'export default defineComponent({name: 'Modeler',setup() {const bpmnContext = BpmnStore;onMounted(() => {bpmnContext.initModeler({container: '#modeler-container',additionalModules: [//添加翻译{ translate: ['value', translate('zh')] },//小地图minimapModule],moddleExtensions: {camunda: camoundaModdel,},});const defaultProcessIdAndName = '1';bpmnContext.importXML(createDefaultBpmnXml(defaultProcessIdAndName, defaultProcessIdAndName)).then((result: Array<string>) => {if (result.length) {console.warn('importSuccess warnings', result);}}).catch((err: any) => {console.warn('importFail errors ', err);});});return () => <div id="modeler-container"/>;},
});

界面效果:

后端代理表达式代码

@Component("codeInterfaceHandler")
public class CodeInterfaceHandler implements JavaDelegate {@Resourceprivate RestTemplate restTemplate;@Overridepublic void execute(DelegateExecution execution) throws Exception {// 获取接口idString interfaceId = getInterfaceId(execution);// 根据接口id查询接口ServiceAssert.isNotNull(interfaceId, "未挂接接口id");String url = PROTOCOL + SysConstants.SERVICE_NAME + GET_INTERFACE_BY_ID_URL + interfaceId;ApiResult apiResult = restTemplate.getForObject(url, ApiResult.class);ServiceAssert.isNotNull(apiResult.getData(), apiResult.getMessage());SysInterface sysInterface = JSONUtil.toBean(JSONUtil.toJsonStr(apiResult.getData()), SysInterface.class);ServiceAssert.isNotNull(sysInterface, "接口信息不存在");}}

后端监听器代码

@Component("codeFlowEndEventListener")
public class CodeFlowEndEventListener implements ExecutionListener {@Overridepublic void notify(DelegateExecution execution) throws Exception {// 任务结束,组织返回数据Map result = new HashMap(16);execution.getVariablesLocal().forEach((k, v) -> {if (execution.getProcessInstance().getVariable(k) != null) {result.put(k, execution.getProcessInstance().getVariable(k));}});if (!CollectionUtil.isEmpty(result)) {execution.getProcessInstance().setVariable(CodeLogicalFlowConstants.RETURN_DATA_OF_FLOW, result);}}
}

流程驱动代码:

@Transactional(rollbackFor = Exception.class)public Map<String, Object> process(String flowCode, String json) {ServiceAssert.isTrue(StrUtil.isNotBlank(json), "未传入逻辑流程入参");Map<String, Object> paramMap = JSONUtil.parseObj(json);ProcessInstanceWithVariables processInstance;try {// 流程启动参数,是逻辑流程生成接口入参,将放入流程变量中processInstance = (ProcessInstanceWithVariables) runtimeService.startProcessInstanceByKey(flowCode, paramMap);} catch (Exception e) {log.error("流程启动出错", e);throw new ServiceException(e.getMessage());}// 任务结束,组织返回数据return getReturnData(processInstance);}

camunda 应用相关推荐

  1. camunda视频教程_【Camunda工作流(1)工作笔记:SpringBoot整合Camunda】

    Camunda BPM 与 Spring Boot 集成示例 本示例是根据 camunda.org官网Spring Boot集成入门指引创建的. github地址:https://github.com ...

  2. 工作流activity_开源、强大的工作流引擎:camunda入门介绍

    原创不易,请多多支持!对Java技术感兴趣的童鞋请关注我,后续技术分享更精彩. 简介 Camunda is a Java-based framework supporting BPMN for wor ...

  3. camunda流程引擎如此简单「四」

    监听器的使用 EL表达式:${} Camunda BPM支持统一表达语言(EL),它是JSP 2.1标准(JSR-245)的一部分.因此,它使用开源的JUEL实现.要获得有关表达式语言用法的更多常规信 ...

  4. camunda流程定义表无数据_创建流程实例时 act_ru_identitylink 表中没有出现相关的人员数据...

    老师您好,我对流程实例有两个问题: 创建流程实例的方法,视频中给出的是 ProcessInstance processInstance = runtimeService.startProcessIns ...

  5. camunda 流程执行追踪_流程引擎为什么选 Camunda

    2019 年初我在重新设计我们组负责的流程系统时,选择了 Camunda 流程引擎,并基于该流程引擎实现了一套适配方案.以前就想做一次总结,但总拖着. 最近公司中台在做流程引擎选型,相关同事找我了解 ...

  6. camunda数据库表结构介绍

      Camunda bpm流程引擎的数据库由多个表组成,表名都以ACT开头,第二部分是说明表用途的两字符标识.笔者在工作中用的Camunda7.11版本共47张表.体验环境:http://www.yu ...

  7. Camunda流程引擎及表结构认识

    一.认识  Camunda Camunda 是一种轻量级的商业流程开源平台. 同类型的产品有 osworkflow.jbpm.activiti.flowable.其中:Jbpm4.Activiti.F ...

  8. [1]深入浅出工作开源框架Camunda: 安装和使用

    目前比较出名的开源工作流框架大概有4个,分别是Activiti/Camunda/Flowable/Jbpm.下面我们先抛开Jbpm框架,因为JBPM的二次开发难度比较大:笔者窃以为Camunda是一个 ...

  9. 中流-接入Camunda流程引擎

    中流-接入Camunda流程引擎 在线体验 配置maven依赖 <dependency><groupId>org.camunda.bpm.springboot</grou ...

  10. camunda工作流开发实战------04 请假流程实例

    接着上篇hello world 说,之前的流程是一个简单的工作流程 不符合业务逻辑,那么稍微正常的流程图应该怎么设计呢? 首先请假是要设置启动人为申请人--填写请假单--到领导审批--审批之通过之后系 ...

最新文章

  1. Logistic Regression
  2. 【BZOJ】3301: [USACO2011 Feb] Cow Line(康托展开)
  3. hive 导出json格式 文件_Magicodes.IE在.NET Core中通过请求头导出多种格式文件
  4. python四分位数_分位函数(四分位数)概念与pandas中的quantile函数
  5. 使用Github Actions构建、发布和部署NuGet软件包
  6. linux firewalld
  7. 比较linux的桌面环境的使用和异同?_深度UI + Ubuntu系统,堪称最强最美Linux发行版!你敢升级吗?...
  8. BZOJ 1059 二分图匹配
  9. 如何使用EasyRecovery的监控硬盘功能
  10. scrapy爬取cnnvd网址数据
  11. 本页设置mac地址过滤来控制计算机对本无线网络的访问,D-Link无线路由器MAC地址过滤怎么设置...
  12. 光学成像原理之景深(Depth of Field)
  13. 三大组件之Spring 第四章Spring与DAO
  14. 环保物联网技术应用研究综述
  15. esp8266基于arduino一键配网掉电保存WIFI账号密码
  16. CUPS学习五:打印机基础
  17. 3dsMax Biped骨骼缩放
  18. 学习如何使用html和css样式将两张图片叠加到另一张图片上,实现微信扫一扫二维码效果
  19. 一篇文章学会使用摩斯密码,简单易懂,你也可以使用“降维打击”
  20. 因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies

热门文章

  1. 备战数学建模43-决策树随机森林Logistic模型(攻坚站7)
  2. 你真的了解HR问你的问题么?
  3. 由于移动硬盘坏了导致的问题
  4. 虚拟机浏览器不能上网,通讯软件可以正常使用解决办法
  5. Love is over?Over is Love?
  6. 用数据揭秘《一出好戏》好在哪里
  7. iOS-基础-数据类型
  8. Peakvue和自相关技术轴承诊断
  9. linux 的基本命令格式,Linux学习之路(一)命令基本格式
  10. react 中 Rap2的使用