- 博客(48)
- 资源 (1)
- 问答 (3)
- 收藏
- 关注
原创 8.多种方式修改元素颜色
同上一节overlays的使用方法,可以使用overlays来修改指定的BPMN元素的颜色,这种需要用的position进行定位,可以修改position的值查看效果,会发现相对位置会变动。以元素左上角为原点。有时需要对特定元素显示不同的颜色,特别是业务中有分组的情况时,起一个标识作用,比如哪些任务是异步执行的,哪些是同步的。下面介绍三种方式来修改元素的颜色。通过canvas的addMarker来给元素添加标识,其实就相当于添加了class。以下是同时使用三种方式的完整代码。
2023-01-04 17:12:20
576
1
原创 7.使用overlay添加定制内容
通过this.bpmnModeler.get('overlays')可以获取到overlays对象,再使用其add函数进行添加html内容与位置信息等,add第一个参数为bpmn元素的唯一ID。以上overlays添加的html标签中都有class="diagram-note",现在通过这个class进行css样式添加,如下。有时候对web上显示的BPMN元素信息进行补充展示或样式的修改,可以使用html结合overlay技术进行定制。运行后可以有如下效果,元素增加了一些注释并有相应的样式。
2023-01-04 15:28:18
415
原创 6.通过axios远程远程加载BPMN
现在将bpmnModeler.importXML()的bpmn参数改为远程服务器获取,使用axios异步获取,代码如下,重点关注这部分代码try...catch内部的相关代码。生产环境中,流程图一般存储在server端,需要通过http请求获取然后加载。使用流行的axios(ajax框架)来远程请求,使用npm i axios进行安装。npm run serve运行后访问,可以正常获取到远程的BPMN并正常加载。
2023-01-04 14:25:43
370
原创 5.流程图的保存
在methods中添加两个异步方法saveToBpmn saveToPic,新版的bpmn-js推荐使用async+await方式代替老式的callback写法,具体参考。在页面标签中添加两个button,用于点击触发保存。这里为了简单,防止button被bpmn的svg重叠,把button放在properties内部。通常来讲,设计的BPMN流程图需要下载保存到指定的地方,bpmn原生的xml格式与图片格式都有可能。点击右上角的保存按钮能对应保存并下载为对应的格式的流程文件。
2023-01-04 10:22:04
612
原创 4.事件监听
当光标hover在元素上时会实时更新console框中的内容,使用click事件点击"pay the pizza"元素时,会弹出alert,说明以上两种方式都监听成功。业务上在预览流程时经常需要实时展示元素信息,比如光标移动到某个BPMN元素上,或者点击元素时,实时提取元素信息。每个bpmn元素都有唯一ID,如果要对某个固定的任务元素进行监听,可以使用如下方式。添加一个div>textarea用来展示提取信息。有两种方式可以实现事件监听。
2023-01-03 17:18:55
156
原创 3.模型设计器web modeler
确保模型中特定于Camunda Platform 7和8的部分得到维护,需要引入camunda-bpmn-js-behaviors依赖,运行npm i camunda-bpmn-js-behaviors;BPMN流程图元素属性面板,需要先安装bpmn-js-properties-panel,再引入相关样式与模块。3.安装camunda-bpmn-moddle,camunda-bpmn-js-behaviors。由于camunda扩展使用了一些特有的标签语法,bpmn-js不能识别,需要额外引入,运行。
2023-01-03 15:24:14
363
原创 2.快速入门quick start
src/componets目录添加BpmnViewerComponent.vue文件,删掉原来的HelloWorld.vue,并添加vue模版内容。以上是加载的bpmn xml字符串,实际工作中我们可能直接加载*.bpmn文件,vue默认不能加载这种文件,需要通过配置raw-loader加载。2.安装好node js,版本不太旧就行,我本地node -v (v16.18.1),npm -v(8.19.2),配置好taobao镜像地址。3.熟悉前端npm技术,了解vue,安装好vue。以上这些前提可以参考。
2022-12-30 10:33:00
281
原创 1.bpmn-js简介
如下图所示,bpmn-js构建在两个重要的库之上:diagram-js和bpmn-moddle。3.定制流程图的样式(比如颜色,布局等)与语言(比如中文显示)1.工作流落地过程中业务系统需要实时展示流程执行过程;2.项目运营过程中需要动态在线修改流程改变业务;
2022-12-30 09:08:31
678
1
原创 camunda视频教程
19.发送任务(send task) & 接收任务(receive task)12.外部任务(external task)使用springboot sdk。15.外部任务(external task)python3实现。13.外部任务(external task)监听器&鉴权。14.外部任务(external task)go语言实现。18.脚本任务(script task)补充外部脚本文件。29.参与者泳池泳道(pool and lane)11.业务任务(service task)
2022-09-23 20:05:23
1409
2
原创 37、引擎高可用方案
单个流程引擎实例不维护跨事务的会话状态。由于 控制台需要登录后再进行操作,每个实例会保存自己的登录session,即登录态,这就要求路由的时候需要定向路由,如果使用权重或轮询的方式路由,会有可能要多次登录的不良体验。/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload 重启下NGINX。1.因为数据库数据不会太大,运行时的数据存储与历史数据分开存储,运行时数据ACT_RU_*开头的表数据量大,但结束就删除了;
2022-09-10 22:23:21
1199
原创 36、流程事务(transaction)
camunda事务与关系型数据库中的事务有点区别,但是通过关系型数据库事务实现的,camunda一个事务是两个wait state之间的部分。camunda流程引擎是被动触发的,如启动流程实例、complete一次task, 发送一次执行信号,引擎内部的job executor触发等,一次事务没结束时,数据没有被持久化到DB,相关数据表会加乐观锁。此时如果在事务中断点停止,其他访问(如访问cockpit)会被挂起,一个事务间的所有活动要么同时成功, 要么同时失败。wait state是camunda事务
2022-09-10 22:18:29
1303
原创 35、数据表介绍
了解了这些理论对使用camunda API有非常大的帮助,丰富完善camunda API已基本可以满足大多数业务场景,然而有些时候复杂的业务中,难免有些操作只靠现在的API无法满足需求。这时我们可以通过扩展引擎API,直接使用SQL操作引擎数据库表数据。了解表结构对操作表数据很关键。到此,我们已经掌握了camunda大多数功能的用法,对整个camunda工作流的设计理解有了全新的认识,基本上还是如下图的层次结构。camunda7.17.0共有49张表,都以ACT_开头,共分为五大类。
2022-09-10 22:14:39
1744
1
原创 34、camunda架构
camunda7目前支持大多 数关系型数据库,camunda8云原生版本支持elasticsearch分布式存储,**persistence Layer: ** 数据持久化,采用mybatis框架;•Engine: 核心引擎,将模型文件解释成对象数据,并提供相关管理;•Admin: 租户,用户,用户组,权限等管理操作,可以从管理界面操作。: 提供JAVA API对部署,任务,流程实例等一系列操作;•Cockpit: 流程控制台,可以从管理界面操作。•Tasklist:任务列表,可以从管理界面查看。
2022-09-10 22:12:49
2023
1
原创 33、连接器(connector)
camunda工作流设计的与外部信息沟通的方法有外部任务(external task),业务任务(service task),执行监听器(execution listener), 以上都是当外部业务较复杂的时候使用,如果外部调用很简单,仅是调用远程直接获取一些状态数据,可以使用camunda提供的连接器connector实现。默认支援的connector类型:1.http connector:用于请求协议的接口。引擎内部存在一个Conectors类会自动探测Classpath下的所有connector,根
2022-09-10 22:10:51
2021
原创 32、多租户(multi-tenancy)
增加两个租户shanghai beijing,同时创建两个组shanghai(上海租户组),beijing(北京租户组),上海租户组分别绑定用户xiaoming,wangbing,北京租户组zhangsan,wangwu,以上四个用户先去掉管理员组。例如,一个租户的流程实例不应该干扰另一个租户的流程实例。北京租户关系北京组,关联后,北京组的用户wangwu zhangsan直接就是北京租户的成员。这两种方法的组合也是可能的。控制台分别使用北京组,上海组 ,管理员账号登录启动流程,查看哪些流程可以启动。
2022-09-10 22:06:26
2484
3
原创 31、BusinessKey的使用
比如线上订餐采用了涉及到订单系统,支付系统,用户下一次订单会启动两个流程,流程引擎中的数据可以通过将订单Id作为BusinessKey进行关联。这样业务在查询此订单的流程数据时,可以通过businessKey查到所有相关流程实例。BusinessKey业务键,从名称上可以看出可能与业务强相关,是的,businessKey设计的目的就是为了将流程引擎数据与业务数据关联上。与业务数据关联的方法除了BusinessKey外,还可能使用流程变量。可以查出支付系统流程实例,也能查出订单系统流程实例。
2022-09-10 21:55:43
1879
原创 30、流程变量及作用域
前面已经很多地方使用过流程变量(variable),camunda中的变量主要有全局变量(variable)和局部变量(Local Variable).前面我们使用的都是全局变量,就是整个流程实例中都可以访问的变量,作用域是整个流程实例。现实开发中,有时候变量只希望变量部分范围可见,多实例任务时同一变量名会有多份不同数据,为了保持数据的并发案例,控制变量的作用域特别重要。流程变量主要是用来方便流程流转的数据传递,大量的业务数据不要使用流程变量。最好只传一些状态数据,影响流程路径的业务数据。流程引擎默认是
2022-09-09 10:48:42
1561
原创 29、spin支持的json数据
camunda引擎是用java语言开发的,当使用java语言开发业务系统,并且采用camunda引擎嵌入到业务系统中的使用方式时,可以采用纯java数据类型。假设前面预约上门项目的外部任务尝试自修在完成时增加一些信息,信息比较复杂,使用复杂的json传数据,根据产品年龄productAge判断,大于5年,需要邮寄维修。邮寄任务中读取前面任务的json数据。Camunda Spin Dataformat 默认支持xml json,现在互联网项目中使用的最多的 是json类型,本教程以json主为。
2022-09-09 10:42:20
1138
3
原创 27、引擎端有用的配置
如果采用rest api或者model直接部署,可以添加配置进行关闭。引擎端同时支持多个项目在使用时,不可能因为某个项目部署流程重启引擎,一般会通过rest api进行部署。auto级别: 数据之前配置的是什么级别就是用什么级别,如果没配置则是audit级别。实际验证发现只能是没有数据的时候可以设置,不能有数据后随意改级别。生产环境中建议使用audit级别,开发测试环境可以使用full级别,方便调试查找问题。audit级别:只有历史的流程实例,活动实例,表单数据等会被保存。none级别:不存储历史数据。
2022-09-09 10:31:27
1033
1
原创 26、流程引擎API
流程引擎(ProcessEngine)是整个camunda工作流的大心脏,初始化好流程引擎,就可以通过它获取各种API的操作。提供的所有API都是线程安全的。
2022-09-09 10:29:40
1345
2
原创 25、流程引擎设计理念
流程引擎名词解释流程定义(Process Definition):确定了流程的结构,设计的流程信息保存在xml文件中,部署到流程引擎中,引擎将xml信息解析成数据保存在数据库中,就是流程定义。每次部署流程时,只要流程有变动,都会自动更新一个版本(version),一个流程定义有一个definitionKey,就是流程BPMN xml中全局的ID,每个version有一个definition ID ,由definitionKey:UUID流程实例(Process Instance):是指根据流程定义
2022-09-09 10:26:12
1137
原创 24、参与者_泳池泳道(participant_pool&lane)
BPMN规范中将参与者(participant)进行分类分组,泳池(pool)一般用来表示相对更大范围的分类,泳道(lane)一般位于泳池内部或其他泳道内部。泳道一般用来对相对较小的范围进行分类。假设对消息事件中的示例订餐流程存在于订餐系统中,支付相关是支付系统中的业务。使用泳池泳道进行分类。外部任务的订阅topic相关的流程定义的key改成Process_pool_lane。由于消息事件Name是用于接收消息的唯一标识,整个流程引擎中不能重复。泳池的配置相当于普通流程的全局配置。
2022-09-09 10:19:36
989
1
原创 23、调用子流程(Call Activity)
调用子流程是指子流程在主流程的外面。子流程一般是多个流程可重用的流程,也可以独立调用子流程。可以对比编程中的方法抽取。子流程运行时,主流程也是等待状态。子流程结束,主流程继续。将上一节内嵌子流程改成调用子流程实现一遍。并行处理多个任务,每个任务调用一次子流程,设置关联的子流程ID。并传递变量给子流程(In Mappings),接收子流程传给主流程的变量( Out Mappings)。没有变动。2.子流程2.0 全局配置ID即为主流程关联的信息。2.2 增加脚本传递变量给主流程在结束的顺序
2022-09-09 10:10:09
1657
4
原创 22、嵌套子流程(embedded Subprocess)
子流程是包含其他活动、网关、事件等的活动, 嵌套子流程是指其本身形成的流程是更大流程的一部分,元素为一个大方框,方框内部是一个完整的流程。嵌套子流程分可以是并行多实例(parallel multi instance subprocess),串行多实例(Sequential multi instance subprocess)子流程运行时,主流程会等待。子流程结束,主流程继续。子流程用处:1.分层建模2.控制变量作用范围假设并行网关章节的上传视频是批量上传,对每个视频进行的格式校验、涉黄鉴别、涉暴鉴别
2022-09-09 10:02:52
1082
原创 21、消息事件(message Event)
消息事件(Message events)是引用已命名消息的事件。一条消息有一个名称和一个有效负载。与信号不同,消息事件总是指向单个收件人。消息事件定义是通过使用messageEventDefinition元素声明的。假设在线订餐平台分为微信小程序订餐,支付宝小程序订餐,微信订餐支持微信支付,支付宝订餐支持支付宝支付。付款流程设置两个信号事件,在处理订单任务中根据订餐端的类型启动不同支付流程。设置为user task,assignee=xiaoming,增加一个表单字段设置订餐的终端类型,枚举类型普通se
2022-09-09 09:57:32
2418
原创 20、定时事件(Timer Event)
用作边界事件时,任务执行到节点时,定时器开始计时,这个功能用作任务超时处理挺有用。https://docs.camunda.org/manual/latest/reference/bpmn20/events/timer-events/#time-dateTime Date: 指定的时间执行,如2022-08-29T12:13:14Z 2022-08-29T12:13:14+08:00(东八区)Time Duration: 过多长时间后任务开始执行,如PT1H3M 表示过1小时3分钟就开始执行。T
2022-09-08 10:59:28
1296
原创 19、基于事件网关(Event-based Gateway)
基于事件的网关最少有两条可执行路径,根据事件做出执行路径的选择决定,当执行到达事件网关时,流程进入等待状态。每个传出序列流后面只能是中间捕获事件的元素。且中间捕获事件的元素只能有一个输入序列流。假设员工xiaoming请假后,3分钟内直接领导wangbing收到了审批提醒,就是直接领导wangbing审批,超过3分钟直接领导没收到信号,就让部门经理zhangsan审批,最后总经理wangwu审批。assignee为xiaoming,并添加请假天数,请假理由表单字段。事件代码增加一个接口,以get请
2022-09-08 10:54:47
1226
原创 18、包含网关(Inclusive Gateway)
包含网关(inclusive gateway)结合了排他网关与并行网关的特点,即可以根据条件判断,也可以同时多个并行执行。包含网关的使用也需要用到两部分。叉子(fork): 用于并行任务开始汇总(join):用于并行任务汇总。假设排他网关中的需求中增加一条,请假天数大于3天,需要增加人事经理审批,人事经理(renyingying)审批与领导审批可并行。用小扳手切换排他网关为包含网关,fork部分。添加一个分支,条件判断是大于3天。增加人事经理审批任务user task,assignee为renyi
2022-09-08 10:47:55
1622
原创 17、并行网关(parallel gateway)
并行网关(parallel gateway)是指可以同时执行所有输出路径,并且需要所有输入路径执行完毕汇总到网关后流程才往下流转的元素。并行网关上的序列流即使有条件判断也会忽略。并行网关分两部分:叉子(fork): 用于并行任务开始汇总(join):用于并行任务汇总。假设社交平台中有个需求是,对用户自上传的视频并行处理几个任务,所有任务全正常达到要求才能上传到系统中。视频格式的校验(service task);内容涉黄鉴别(user task人工处理);内容涉暴处理(user task 人工处
2022-09-08 10:31:24
3117
原创 16、排他网关(exlusive gateway)
排他网关是指在多条执行路径时,根据条件判断选择其中一条路径执行的网关,相当于程序中条件控制,if … elseif… else…。假设员工小明(xiaoming)请假,天数小于等于3天直接上级(wangbing)审批即可,大于3天小于等于5天需要直接上级(wangbing)和部门经理(zhangsan)都要审批,大于5天需要直接上级(wangbing),部门经理(zhangsan)和总经理(wangwu)三者审批。指定任务请假人就是启动的人,添加请假表单两个属性变量reason(请假原因),leaveD
2022-09-08 10:22:08
2742
原创 15、发送任务(send task) & 接收任务(received task)
有简单的一个发送任务根据接收任务的消息ID和业务KEY(businessKey)来绑定一个消息发送,接收任务收到发送任务的消息后才往下流转。1.通过控制台启动一个接收任务的实例,并给一个业务businessKey=message_bussinessKey。启动后,接收任务生成一个流程实例,并卡在接收任务中等待。发送任务是一个非常简单的任务,一般只用来发送一个消息;接收任务用来等待发送任务的消息,仅仅用来等待作用。跳过断点后,接收任务收到消息并流转任务结束实例。发送任务和接收任务一般成对配合使用。
2022-09-08 09:59:25
1695
原创 14、脚本任务(script task)
在Camunda中,脚本任务是一个自动活动,当流程执行到脚本任务时,相关的脚本自动执行。camunda支持大多是兼容JSR-223的脚本引擎实现,比如Groovy, JavaScript, JRuby and Jython,要使用脚本功能,需要在classpath中添加对应的脚本引擎,Javascript, Groovy两种脚本引擎已在发布中包含。相关参考文档:https://docs.camunda.org/manual/7.17/reference/bpmn20/tasks/script-task/
2022-09-08 09:54:56
2132
6
原创 11、外部任务(external task)
现在启动客户端,打好断点,发现进入断点,获取isFree变量为true,设置的重试频率为0,所以会上报异步,控制台中可以查看错误原因,这个功能很有用,生产环境中出错通过日志排错很麻烦,这个功能可以快速精确定位问题。如果为0,则会创建一个事件,并且不能再获取任务,除非重试次数再次增加。camunda工作流特有的类型,非常有用。第3步当处理业务失败时,还可以上报异常给引擎,可以从控制台可视化准确定位到流程实例失败的原因,当然,上报异常时,在异常没消失前会永远卡在失败节点,重试成功后异常会消失,流程往下走。
2022-09-08 08:59:55
4417
4
原创 10、业务任务(service task)
业务任务通常是用来调用业务系统,camunda中可以调用JAVA代码或者rest api调用。在camunda中,业务任务实现方式有5种,本节先用一个小例子显示前三种,External 外部任务,Connector连接器后面分别讲解。假设用户预约电器公司上门维修家电,然后师傅上门维修,完成后公司回访客户对师傅服务打分,师傅查询自己的评分。使用java class 模式实现业务任务。com.forestlake.camunda.servicetask.ReserveRepair使用Delegate ex
2022-09-07 16:52:57
2677
2
原创 8、BPMN介绍
BPMN(Business Process Modeling Notation)指业务流程建模与标记,由BPMI Notation Working Group超过2年的努力于2004年5月对外发布了BPMN 1.0 规范,后BPMI并入到OMG组织,OMG于2011年推出BPMN2.0标准BPMN定义了业务流程图,其基于流程图技术,同时为创建业务流程操作的图形化模型进行了裁减。业务流程的模型就是图形化对象的网图,包括活动(也可以说工作)和定义操作顺序的流控制。
2022-09-07 16:33:29
1774
TA创建的收藏夹 TA关注的收藏夹
TA关注的人