camunda 应用
camunda 应用实践
- 使用camunda作后端接口编排
- 前端改造
- 后端驱动
- 代码实现 & 效果展示
使用camunda作后端接口编排
我们在使用camnuda作为后端接口编排组件后,在实际开发应用中遇到了不少问题,在此做一些总结,供后期查阅
前端改造
camunda 官方提供了流程图绘制客户端,但是由于我们是B/S系统所以需要将流程设计器集成到网页端,于是我们使用vue3+ts结合bpmn.js做了对camunda属性面板改造,实现如下功能:
- vue3+ts+bpmn.js ,将camunda流程设计器集成到网页端;
- 使用bpmn2.0中的服务任务 + 网关 + 流转条件实现接口编排;
- 使用bpmn2.0中的事物子流程 + 边界异常事件 + 取消事件 + 补偿节点实现分布式事务控制;
后端驱动
使用camunda流程引擎api实现流程初始化,部署,实例启动等:
- 利用代理表达式 ,实现对流程设计器中配置的接口进行触发调用;
- 使用监听器实现流程返回结果处理;
代码实现 & 效果展示
首先前端引入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 应用相关推荐
- camunda视频教程_【Camunda工作流(1)工作笔记:SpringBoot整合Camunda】
Camunda BPM 与 Spring Boot 集成示例 本示例是根据 camunda.org官网Spring Boot集成入门指引创建的. github地址:https://github.com ...
- 工作流activity_开源、强大的工作流引擎:camunda入门介绍
原创不易,请多多支持!对Java技术感兴趣的童鞋请关注我,后续技术分享更精彩. 简介 Camunda is a Java-based framework supporting BPMN for wor ...
- camunda流程引擎如此简单「四」
监听器的使用 EL表达式:${} Camunda BPM支持统一表达语言(EL),它是JSP 2.1标准(JSR-245)的一部分.因此,它使用开源的JUEL实现.要获得有关表达式语言用法的更多常规信 ...
- camunda流程定义表无数据_创建流程实例时 act_ru_identitylink 表中没有出现相关的人员数据...
老师您好,我对流程实例有两个问题: 创建流程实例的方法,视频中给出的是 ProcessInstance processInstance = runtimeService.startProcessIns ...
- camunda 流程执行追踪_流程引擎为什么选 Camunda
2019 年初我在重新设计我们组负责的流程系统时,选择了 Camunda 流程引擎,并基于该流程引擎实现了一套适配方案.以前就想做一次总结,但总拖着. 最近公司中台在做流程引擎选型,相关同事找我了解 ...
- camunda数据库表结构介绍
Camunda bpm流程引擎的数据库由多个表组成,表名都以ACT开头,第二部分是说明表用途的两字符标识.笔者在工作中用的Camunda7.11版本共47张表.体验环境:http://www.yu ...
- Camunda流程引擎及表结构认识
一.认识 Camunda Camunda 是一种轻量级的商业流程开源平台. 同类型的产品有 osworkflow.jbpm.activiti.flowable.其中:Jbpm4.Activiti.F ...
- [1]深入浅出工作开源框架Camunda: 安装和使用
目前比较出名的开源工作流框架大概有4个,分别是Activiti/Camunda/Flowable/Jbpm.下面我们先抛开Jbpm框架,因为JBPM的二次开发难度比较大:笔者窃以为Camunda是一个 ...
- 中流-接入Camunda流程引擎
中流-接入Camunda流程引擎 在线体验 配置maven依赖 <dependency><groupId>org.camunda.bpm.springboot</grou ...
- camunda工作流开发实战------04 请假流程实例
接着上篇hello world 说,之前的流程是一个简单的工作流程 不符合业务逻辑,那么稍微正常的流程图应该怎么设计呢? 首先请假是要设置启动人为申请人--填写请假单--到领导审批--审批之通过之后系 ...
最新文章
- Logistic Regression
- 【BZOJ】3301: [USACO2011 Feb] Cow Line(康托展开)
- hive 导出json格式 文件_Magicodes.IE在.NET Core中通过请求头导出多种格式文件
- python四分位数_分位函数(四分位数)概念与pandas中的quantile函数
- 使用Github Actions构建、发布和部署NuGet软件包
- linux firewalld
- 比较linux的桌面环境的使用和异同?_深度UI + Ubuntu系统,堪称最强最美Linux发行版!你敢升级吗?...
- BZOJ 1059 二分图匹配
- 如何使用EasyRecovery的监控硬盘功能
- scrapy爬取cnnvd网址数据
- 本页设置mac地址过滤来控制计算机对本无线网络的访问,D-Link无线路由器MAC地址过滤怎么设置...
- 光学成像原理之景深(Depth of Field)
- 三大组件之Spring 第四章Spring与DAO
- 环保物联网技术应用研究综述
- esp8266基于arduino一键配网掉电保存WIFI账号密码
- CUPS学习五:打印机基础
- 3dsMax Biped骨骼缩放
- 学习如何使用html和css样式将两张图片叠加到另一张图片上,实现微信扫一扫二维码效果
- 一篇文章学会使用摩斯密码,简单易懂,你也可以使用“降维打击”
- 因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies