如何设计一个流程引擎(如何设计一个流程引擎系统)

流程引擎是低代码平台的核心,它可以帮助我们去实现非常灵活的流程设计,极大的助力实现数据流转的的规范化。那么,如何设计一个流程引擎呢?一起来看一下吧。

如何设计一个流程引擎(如何设计一个流程引擎系统)

流程引擎是低代码平台的核心,它可以帮助我们去实现非常灵活的流程设计,极大的助力实现数据流转的的规范化。流程引擎是什么?国内外流程引擎有什么区别?如何设计一个流程引擎?

一、流程引擎

1. 什么是流程引擎

流程引擎,用来驱动业务按照设定的固定流程去流转的东西,在复杂多变的业务情况下,使用既定的流程能够大大降低我们设计业务的成本,并且保证了我们业务执行的准确性。

2. 流程引擎的主要标准

BPMN(Business Process Model And Notation), 业务流程模型和符号,是由BPMI(BusinessProcess Management Initiative)开发的一套标准的业务流程建模符号,使用 BPMN 提供的符号可以创建业务流程。即BPMN是用来建模业务流程的标准规则。

WFMC(Workflow Management Coalition),国际工作流管理联盟。于1993年成立,发布了一系列的工作流定义、软件接口的草案文本,是目前世界上公认的最具权威性的工作流标准制定机构,得到了广泛的支持和应用。

2002 年10月25日,WFMC发布了基于XML的流程定义语言1.0版的最终文本(Workflow Process Definition Interface——XML Process Definition Language 文档编号:WFMC-TC-1025),以及此前发布的工作流应用软件接口规范WFMC-TC-1009, WFMC-TC-1013等系列文件,构成了工作流定义及系统的设计标准。

BPEL(Business Process Execution Language),意为业务过程执行语言,是一种基于XML的,用来描写业务过程的编程语言,被描写的业务过程的每个单一步骤则由Web服务来实现。

2002年IBM、BEA和微软一起开发和引入了BPEL作为描写协调Web服务的语言。这个描写的本身也由Web服务提供,并可以当作Web服务来使用。通过BPEL可以描写一个参加一个Web服务过程的Web服务的接口,比如信息需要按照怎样的顺序被输入,但是BPEL无法用来描写一个业务过程的调谐。

3. 国内外流程引擎的区别

市面上国外的流程引擎主要有osworkflow、jbpm、Activiti、flowable、camunda,底层架构设计优秀。国内流程引擎,Java领域有广州天翎、炎黄盈动等、深圳奥哲、上海易正等,在设计理念和功能实现上各局特色,并且非常成熟,比如天翎主打的就是擅长中国式复杂业务流程处理。

国内外流程引擎有什么区别呢?主要有三个方面:

4. 功能应用需求

国外流程引擎功能上不能满足中国特色的流程应用需求,比如:抄送、会签、加签、传阅、跳转、任意流、退回、取回、撤销、一人多部门等需求,这些需求可以通过扩展开发实现,但是开发周期较长,风险较大。

5. 组织模型需求

流程引擎自带简单的组织用户表,比如camunda流程引擎自带了用户表(act_id_user)、用户群组表(act_id_group)、用户群组关联表(act_id_membership)这几张表,功能十分简单,基本上满足不了国内企业级应用需求,需要单独涉及组织机构表,然后跟流程引擎进行集成。比如最常见需求——多组织流程架构支持,集团总部、子公司多级组织架构,国内组织架构涉及到有组织、部门、用户、岗位、职务多个要素,这些要素间有复杂逻辑关系。

6. 国外流程引擎具有局限性

国外流程引擎以嵌入式形式存在,核心考量是简化程序开发,所以经常是作为开发工具IDE的插件形式(现在也做了些调整,提供web方式定义流程,单功能比较弱),比如财务软件中嵌入一个流程,最著名的是Activiti和flowable(同一个人开发)。一些国内低代码平台也是基于Activiti去魔改的,有一定局限性,比如宏天、红迅,所以不可避免受到很多限制。

二、怎样设计流程引擎

流程逻辑执行:

1. 状态机原理

状态机(State Machine),定义事物状态以及这些状态之间转移和动作等行为的数学模型。一般可以分为有限状态机、并发状态机、分层状态机等。

没有流程引擎前的弱版流程引擎,必须要有状态,状态即节点,状态机= 流程 状态。

2. Xml转换Object

Xml ,一种数据格式,Object ,对象。做流程图的项目时,新的流程定义为Xml的,需要对Xml与Java Object进行互转。

如何设计一个流程引擎(如何设计一个流程引擎系统)

流程描述(XML)

3. 流程运行状态

流程状态是对于一个对象在流程的不同阶段进行概括性、结果性、引导性的描述。

如何设计一个流程引擎(如何设计一个流程引擎系统)

(流程运行时类图)

  • WFRunner——工作流处理的对外接口,需要用到工作流的调用均通过此对象完成;
  • StateMachine——工作流状态机的实现,是整个工作流实现系统的核心,具体说明参见API文档;
  • ActorRT——当前处理者运行时状态;
  • ActorHIS——历史处理者处理历史纪录;
  • FlowStateRT——流程当前状态,比如:挂起、运行等;
  • NodeRT——当前节点运行时状态;一个Node可以对应多个Actor;
  • RelationHIS——流程路径处理历史纪录;

其他几个类均为实现WorkFlow运行所需要的辅助功能类。

三、流程引擎的效果和应用

流程引擎的应用十分广泛,本文将展示部分常见的流程引擎应用场景。

常见效果展示,包括后台设计、前台运行、流程干预、流程报表统计等。

如何设计一个流程引擎(如何设计一个流程引擎系统)

(流程后台设计1—图形)

如何设计一个流程引擎(如何设计一个流程引擎系统)

(流程后台设计2-源代码)

如何设计一个流程引擎(如何设计一个流程引擎系统)

(流程后台设计3-子流程)

如何设计一个流程引擎(如何设计一个流程引擎系统)

(流程企业域展示——流程干预)

如何设计一个流程引擎(如何设计一个流程引擎系统)

(流程后台设计4-报表设计)

如何设计一个流程引擎(如何设计一个流程引擎系统)如何设计一个流程引擎(如何设计一个流程引擎系统)如何设计一个流程引擎(如何设计一个流程引擎系统)

(流程前台运行)

流程引擎也可用于去整合多个应用系统。

1)集成第三方系统

通过RESTFUL API与第三方业务系统集成、业务数据保存在第三方系统,流程数据保存在流程引擎上。

如何设计一个流程引擎(如何设计一个流程引擎系统)

2)流程数据分析

流程引擎可以帮助用户从多维度、多时间、多角度分析流程数据。

如何设计一个流程引擎(如何设计一个流程引擎系统)

本文由 @周志军Jarod 原创发布于人人都是产品经理,未经作者许可,禁止转载。

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。