什么是 BPMN ?为什么要用 BPMN 和工作流 ?

2021-08-18 11:39:47 浏览数 (1)

BPMN 和 Activiti 介绍

工作流介绍

在任何行业和企业中,都有各种各样的流程,例如:

  1. 请假流程
  2. 报销流程
  3. 入职流程
  4. 离职流程
  5. 出差流程
  6. 等等……

就算你自己没有设计过工作流,那么你每天肯定也在使用各种流程。

为什么要用 BPMN ?

对于流程控制,有一种比较初级的玩法是:在业务代码里面加入 Status(状态机) 字段维护流程状态,流程负责的审批人可能也是 Hard Code(硬编码),这种玩法实现流程初级会比较快,但是长远来看会出现几个问题:

  1. 流程健壮性差,但凡出现人员变动,或者组织结构调整,就需要修改代码,维护成本高
  2. 流程无法复用,当组织出现新的工作流程,又要重新写一套代码,开发成本非常高
  3. 流程和业务代码耦合,你中有我,我中有你(并不符合单一职责和解耦的设计原则)

BPMN:业务流程模型和标记法 工作流(Workflow)是对各个行业的流程进行抽象,例如电信、软件、制造、金融和办公自动化领域。为了给全部业务的参与者提供易于理解的标准标记法,由业务流程管理倡议组织 BPMI 开发出了“业务流程建模标记法” Business Process Modeling Notation, BPMN。BPMI 组织 于 2005 年并入 OMG 国际规范组织(Object Management Group),当前 BPMN 规范由 OMG 组织进行维护。

为什么要遵循规范 ?

遵循市场行为

举例:我们日常的电池 ? 有 7 号和 5 号标准,你当然可以生产一个 6 号的电池,有没有人买就没人知道了,如果你按标准生产出的电池,那么是可以直接用到大多数电器上,如果你生产 6 号电池,那么你只能自己开发 6 号电池的电器,且不说你这样的做法是否被市场和行业认可,另外搞那么多不同的标准出来对于消费者来说也是一种灾难,例如当年微软的 IE 和 FireFox 的两套标准让现在的开发人员多么痛苦就知道了。。

遵循行业的共识

目前主流的工作流厂商都是基于 BPMN 2.0 规范开发流程,想要自立规范之前也请完全掌握和了解目前的规范。

云程

JeectBoot

另外对于产品和业务人员也需要学习和理解 BPMN 的符号,从而可以对业务进行建模,可以看看人人都是产品经历这篇文章: 关于 BPMN 流程建模方法 ,从而可以利用现有的 BPMN 流程设计器工具快速对业务建模(无需自己开发),只需将导出的 *.bpmn 文件导入遵循 BPMN 规范的流程引擎内即可运行。充分利用行业的生态和工具。这就是遵循规范所带来的收益。

有没有银弹 ?(BPMN 的适用场景)

我们知道软件行业是没有银弹,任何工具都有适用场景,如果把一个工具放到一个不适应的场景内,那么最终起到事倍功半的效果,流程引擎也不是银弹,它是一个对于复杂流程和抽象和复用工具,对于那些工作流程多且复杂的业务系统,合理的使用流程引擎会大大降低我们对于工作流的开发成本和时间,并且最终交付的效果也会比自己开发流程引擎要好上许多。

但是如果你的业务系统没有那么多的工作流程,或者只有很简单的状态从 A -> B 的转移,那么引入流程引擎显然是 大马拉小车,费时费力不说,而且会造成简单的需求开发起来很麻烦,拉长开发周期时间,最终交付的效果也未必很好。所以选择合适的工具,就成了程序员最重要的选择。

Activiti 是应对大型系统的复杂流程的作战工具,小规模场景和流程不复杂的业务系统,不建议使用。 本章总结:为什么要用工作流引擎 ?

  1. 自行研发流程,把流程和业务耦合不仅导致代码开发、修改成本高,而且流程偏定制开发,无法复用,就好比你自己生产一个 6 号电池 ?
  2. 通过流程引擎,可以以极低的成本,快速实现业务工作流,提高开发效率,而且久经生产考验的流程引擎,也比任何人从 0 开始写流程要可靠的多,流程引擎的功能并没有多特别,都可以通过逻辑代码实现的,流程引擎的核心功能在于高质量的复用,设计层面的解耦(设计思想,语言和技术栈无关)
  3. BPMN2.0 是行业规范,遵循行业标准,有众多成熟工具可以使用,例如 bpmn 流程设计工具等等……系统需要实现的工作流越多,使用工作流的收益就越大
  4. 流程引擎不是银弹,它只适用于工作流程多且复杂的大型业务系统,如果是流程逻辑简单的业务系统,那么不建议使用流程引擎

Activit 是应对大规模作战的装备

BPMN 规范介绍

由于 BPMN 1.0 规范广受欢迎,OMG (Object Management Group) 组织于2011年1月发布 BPMN 2.0 规范,BPMN 2.0 版本则继承了 1.0 版本的内容,并且注重流程执行语法和标准交换格式。

OMG 组织致力于维护 BPMN 规范的两个目标:

  1. 流程的可迁移性:BPMN 2.0 规范定义了业务流程的符号以及模型,并且为流程定义设定了转换格式,目的是为了让流程的定义实现可移植性,那么用户可以在不同的供应商环境中定义流程,并且这些 流程可以移植到其他遵守 BPMN 2.0 规范的供应商环境中。
  2. 解决简单和复杂的平衡:BPMN 想要解决流程设计和复杂需求中间寻找一个平衡点,可以让非技术人员建立简单并且易懂的业务流程模型,同时可以处理高度复杂的业务流程,因此要解决这两个矛盾的要求,需要在 BPMN 规范中定义标准的图形和符号。
四种基本要素

BPMN 2.0 的图形结构和要素,建议直接参考 WIKI 百科的答案,这里我就不搬运了:

  • wiki 百科:BPMN 业务流程模型和标记法
2.0 的几点改进

相比 BPMN 1.0 主要有以下改进:

  • 规范了流程元素的执行语法。
  • 定义了流程模型和流程图的扩展机制。
  • 细化了事件的组成。扩展了参与者的交互定义。
  • 定义了编排模型。

Activiti 介绍

Activiti 是目前国内比较主流的基于 BPMN 2.0 规范实现的工作流引擎,目前已经发布到 7.X 版本,并且已经开始实现 DMN 规范(决策与图形,后面会讲),另外关于工作流引擎还有一些比较老牌的玩家例如:JBPM 现在发展的也很不错,还有目前比较新兴的流程引擎:camunndaflowable 目前看起来也潜力十足,他们都是遵循了 BPMN 2.0 规范,因为在国内应用的比较主流,所以这里我们这里重点介绍 Activiti

Activiti 出现和发展

这里简单介绍 JBPM 和 Activiti 的发展历史,有兴趣深究的自行去 Google 搜索

Activiti 的发展线路:

  1. Tom Baeyens 是 JBPM 的创始人,因为理念不合 Tom Baeyens 加入 Alfresco 公司后又发布了 Activit 5
  2. JBPM 因此放弃 JBPM 4 架构,完全基于 Drools Flow 重新开发 JBMP 5,但他们同样都支持 BPMN 2.0 规范
  3. 从正统的延续来看,Activit 5 更像是对 JBPM 3、JBPM 4 的延续,所以国内大多企业都选择 Activit
JBPM、Activiti 区别
  1. JBPM 推翻历史架构,重新使用了 Drools Flow 作为工作流架构
  2. JBPM 采用的是 LGPL 开源协议,对源码修改需要商业授权
  3. Activiti 采用了更为宽松的 Apache License 2.0 协议
  4. ……(想到再补充)

官方的 Activiti 示例

官方发布的 Activiti 演示程序,可以首先通过该例子来了解 Activiti 大部分功能,包括:

  • 流程定义
  • 流程发布
  • 动态表单

等等,通过这个示例程序,作为切入 Activiti 的引子,建立初步了解后,更有信心深入了解 Activiti 工作流引擎

下载和使用示例程序步骤:

  • Activiti 6.0 示例程序
  • 将示例程序 /wars 目录下的 3 个程序拷贝到 Tomcat/webapps 目录,然后启动 Tomcat 即可
  • 访问示例程序:http://localhost:8080/activiti-app/#/ 输入默认账号:admin/test 访问即可

Activiti 目录 /wars 下的三个示例程序职责分工:

应用

说明

地址

默认账号

activiti-app

一个比较完善的流程引擎示例程序

/activiti-app

admin/test

activiti-admin

用于查看流程引擎中的主要数据

/activiti-admin

admin/admin

activiti-rest

rest-api 应用 API,不再局限 Jar

/activiti-rest

kermit/kermit

演示一个简易的工作流的几个步骤:

  1. 进入 activiti-app 系统,为创建用户
  2. 设计一个简单的工作流,并且为流程节点绑定用户
  3. 创建 HR App 应用程序,设置包含请假流程,并且发布
  4. 员工进入 HR App 程序,提交一个请假申请
  5. 经理进入系统,并且同意员工的请假申请,示例流程完成
  6. 通过 activiti-admin 程序连接到 activiti-app 查看流程的历史

进入 activiti-app 系统,为创建用户

这里简单介绍三个菜单的主要功能:

  • Kickstart App:定义应用程序,设计流程,建立程序和流程之间的关系
  • Task App:管理示例程序的任务,例如:我的待办,发起流程等等
  • Identity management:管理用户、用户组等信息

在 Identity management -> Users 菜单创建两个用户,用于模拟工作流:

在 Kickstart App -> Processes 创建简单的请假流程

值得注意的是需要为用户任务分配流程变量,我们这里简单起见直接绑定用户,如图:

最后我们在 Kickstart App -> Apps 创建一个应用程序,并且绑定刚才设计的请假流程,如图:

切记要发布流程,这样我们切换普通员工 jack 身份进入系统的时候,就能看到发布应用程序,并且可以发起请假申请了,如图:

Show New App

今天身体有点不舒服,进入 HR App 发起请假申请,如图:

当我的请假申请提交的时候,任务就会自动发到经理那边,我们切换经理账号看看:

当经理点击完成后,流程走完,任务就自动结束了。

那么如果想要查看流程历史,就要借助 activiti-admin 这个演示程序了:

  1. 打开链接:http://localhost:8080/activiti-admin/ 进入首页
  2. 输入默认账号 admin/admin 就可以
  3. 首次进入要配置 activiti-app 的信息

如图:

activiti-app Config

这里我们配置过就可以直接打开 Instance,就可以看到所有执行过的流程历史,点击流程实例就可以看到详细的历史信息,如图:

总结

本篇主要介绍:

  • 工作流概念和发展
  • BPMN 和 Activiti 的诞生和发展
  • Activiti 官方示例程序的展示
  • Activiti 配置功能展示

以上功能只是流程引擎的九牛一毛,希望通过以上示例程序可以更好的帮助大家建立信心,从而更好面对后面的进阶知识。更好的掌握 Activiti 和 BPMN 2.0 的世界。

0 人点赞