基于 BPMN 2.0 的自定义流程设计与实现

发表时间:2020/12/21   来源:《科学与技术》2020年22期   作者:金怡成 韦锦涛 李昱 沈舒男
[导读] 为了快速响应用户在业务开展过程中对流程的变更,结合BPMN 2.0规范、
        金怡成,韦锦涛,李 昱,沈舒男
        中国电建集团华东勘测设计研究院有限公司??311122
        摘 要:为了快速响应用户在业务开展过程中对流程的变更,结合BPMN 2.0规范、流程可视化编辑技术、流程引擎技术等,提出基于BPMN2.0的自定义流程解决方案,通过流程在线设计、更新和发布,提升流程可用性、灵活性、高效性,优化用户流程使用体验,大幅度降低应用系统更新维护成本。
        关键词:BPMN 2.0;流程可视化编辑;自定义流程;
        Design and implementation of custom process based on BPMN2.0
JIN Yi-cheng, WEI Jin-tao, LI YU, SHEN Shu-nan
        Abstract:In order to make quick response to the users’ change requirements of process during conducting the business, combined with BPMN 2.0 specifications, process visualization editing technology, process engine technology et al, the customed solution for process is proposed which is based on the BPMN2.0 specifications. The solution improves the availability, flexibility and efficiency of process, optimizes the experience of using system and dramatically reduces the cost of system update maintenance by means of online process design and version of the iteration.
        Keywords: BPMN 2.0; process visualization editing; custom process

一、引言
        业务流程是为达到特定的价值目标而由不同的人分别共同完成的一系列活动。企业根据自身的发展时期制定不同的业务流程,并通过ERP、OA等信息系统,将具体的业务流程电子化进行管理,其目的是希望提高顾客满意度和公司的市场竞争能力并提高企业绩效,以不断适应和支持企业的发展。
        随着数字化浪潮的不断推进,企业规模与业务领域的不断扩张,企业组织机构、管理策略持续更新迭代,相关业务流程的变更和完善频率逐渐提高,对流程产品的效率与稳定性提出了更高的要求。
        传统的基于BPMN的流程产品,在流程设计与配置、流程变更与部署等方面均有一定的复杂性,主要体现在以下两方面:
(1)存在较多流程相关术语,用户需要进行一段时间的学习培训,才能具备上手操作的条件,且配置项复杂,存在配置错误的风险;
(2)流程的设计与配置主要面向计算机程序开发人员,需要具备程序编码知识,对管理人员和业务人员等无计算机基础的用户不友好。
        基于上述现状,提出了基于BPMN2.0的自定义流程的设计,旨在缩短业务流程信息化过程中的设计和实施周期,降低使用复杂度,向用户提供一套图形化、可配置、易上手的自由流程设计系统,让企业职能和业务管理人员参与企业流程的制定和完善,提高流程管理效率。
二、关键技术与方法
2.1 BPMN 2.0
        业务流程建模标注2.0(business process modeling notation 2.0,简称BPMN 2.0)是业务流程管理领域的一种标准符号。BPMN 2.0存在3种基本类型的端到端的业务流程,分别是:编制(orchestration)、编排(choreography)和协作(collaboration)。建模者可以使用过程来对组织内部的业务过程进行建模,还可以使用编排或协作来对组织间业务过程的交互进行建模[1]。
        BPMN 2.0过程中有4个核心元素,分别是:任务(task)、事件(event)、网关(gateway)、顺序流(sequence flow),由这些元素来定义BPMN 2.0 的过程模型[2]。
2.2Flowable流程引擎
        Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义,创建这些流程定义的流程实例,进行查询、访问运行中或历史的流程实例与相关数据。
        Flowable核心引擎主要包括以下七个服务(Service):
(1)RepositoryService:提供流程定义的部署和查询服务;
(2)RuntimeService:提供流程实例、流程变量在流程运行时的查询服务;
(3)TaskService:提供流程节点查询、审批、修改、删除等一系列功能;
(4)IdentityService:提供用户及用户组的管理功能;
(5)HistoryService:提供历史流程的实例和变量等查询服务;
(6)FormService:提供流程相关表单的数据关联和查询相关操作;
(7)ManagementService:提供流程引擎的维护管理功能。
2.3Bpmn.js
         Bpmn.js是一个BPMN2.0渲染工具包和web建模器。使用JavaScript编写,在不需要后端服务器支持的前提下,向浏览器内嵌入BPMN2.0流程图,用户可以通过直接操作流程图形进行流程配置,同步生成出相应的标准XML代码。
         以此为基础能够将BPMN2.0流程图与绝大多数的web应用进行集成,让用户能够在web上直接对流程模型(XML)进行查看与编辑,极大程度上简化了流程图编辑的操作,同时也为流程设计器的开发与设计奠定了良好的基础。
         Bpmn.js提供了流程图的查看能力,能够将导入的XML直接生成对应的矢量化流程图,并且提供了一定的自定义空间。用户可以使用其中的方法对流程图进行颜色、大小、样式等调整。
         Bpmn.js同时提供了一系列拓展插件,其中包括:
        (1)bpmn-js-nyan
        提供自定义颜色,流程图元素大小自由缩放,流程自定义图例等附加功能,提高了整个流程图的拓展与操作能力。
    (2)bpmn-js-properties-panel
         提供了bpmn.js一个完整的属性面板,用于编辑流程中所有模块的属性与相关配置。
         (3)bpmn-moddle
         提供在NodeJS和浏览器中读写BPMN 2.0图表文件的能力;并且能验证生成的XML模型是否符合BPMN 2.0的标准,即XML模型能否正确运行。
2.4Vue.js
         Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动[3]。
         Vue.js具有一下特性:
         (1)双向数据绑定
         声明式渲染是数据双向绑定的主要体现,同样也是 Vue.js 的核心,它允许采用简洁的模板语法将数据声明式渲染整合进 DOM。
         (2)组件化
         组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。
         在开发过程中,当组件和 HTML、JavaScript 等有非常紧密的关系时,可以根据实际的需要自定义组件,使开发变得更加便利,可大量减少代码编写量。
         组件还支持热重载(hotreload),当修改时,不会刷新页面,只是对组件本身立刻重载,不会影响整个应用当前的状态。
        三、自定义流程设计与实现
3.1 自定义流程模型设计
        根据BPMN 2.0的定义,流程模型必须包括事件、任务和顺序流,复杂的流程还需基于网关实现。
        常用的事件包括启动事件和结束事件,启动事件是流程的起点,定义了流程的启动方式;结束事件标志着流程中一个分支的结束。
        常用的任务主要为用户任务。用户任务用于对需要人工执行的任务进行建模,当流程执行到达用户任务时,会为指派该任务的用户或用户组创建新的任务。
        顺序流是流程中两个相关联元素的连接器,在流程执行过程中,一个元素被实例化之后,会沿着该实例的所有出口顺序流执行。
        网关主要用于控制流程的流向,分为并行网关、排他网关和包容网关。并行网关可将执行分支拆分成多条路径,同时也可以将多条执行路径合并为同一条执行路径;排他网关按条件顺序过滤输出执行路径,只会选择其中一条执行;包容网关可以看作排他网关和并行网关的整合,经过包容网关时可以同时选择多条输出顺序流[4]。
        在理解了BPMN2.0流程模型的含义后,结合自定义流程的需求,用户需要以图形化和可视化的方式对流程进行设计,便可将上述流程模型抽象为五种基本节点:开始节点、结束节点、审批节点、条件节点和分支节点。通过将节点按用户需要的顺序进行连接与组合,最终形成一个完整的流程模型。
        在设计上采用将流程启动事件和第一个用户任务替换为开始节点,流程结束事件替换为结束节点,且开始节点和结束节点不允许用户编辑,从而减少用户对流程模型概念的理解成本,降低用户流程设计的复杂度的同时,又能满足BPMN2.0的定义和规范。
        对流程模型进行新的抽象和设计后,前端也需要定义一个JSON数据对象用来存储流程模型,在图形化界面完成了流程设计工作后,需将此JSON对象交给后台处理转换为BPMN2.0的标准XML文件。
        在流程模型的JSON数据对象中,每个节点都以一个对象的形式来保存节点的信息,且由ID作为唯一编号,并且在节点配置(nodeConfig)属性中存储了节点相关的所有数据,如审批类型、审批人信息、节点标题、节点按钮信息、跳过策略等属性。以下为节点的数据对象示例:
{
        id: uuid(16, 16),
        type: 'approval',
        title: '审批',
        nodeConfig: {
         approvalType: '1',
         assignee: '',
         assigneeUserFullName: '',
         assigneeType: '1',
         assigneeLabel: '审批',
         buttonList: [],
         required: '0',
         carbonCopyList: '',// 抄送人数组
         copyOnAgree: '',
         emptySolution: '0',
         emptyAssigneeUserName: '',
         emptyAssigneeUserFullName: ''
        }
}
3.2 自定义流程应用设计
        自定义流程的前端应用需采用图形化的设计,相较于传统的流程设计器,用户可通过简单的配置即可完成流程的设计,主要功能设计如下:
        (1)条件节点
        条件节点主要实现排他网关和顺序流的功能。当添加条件节点时,会出现两个条件节点,分别代表IF和ELSE的条件。用户可对其中一个节点进行配置,另一个节点默认为其他情况。同一个条件组内部各个条件的关系为与(AND)的关系,多个条件组之间为或(OR)的关系,用户可以根据业务需求进行灵活组合。每个条件节点都可以单独设置优先级,流程执行过程中将按优先级顺序匹配来执行条件。

        图3.2-1 条件节点示例
        (2)审批节点
        审批节点实现用户任务的功能,即需要用户进行审批处理的节点,主要包含以下配置:
        节点描述:任务待办与表单中展示的节点描述,如财务负责人审批,公司领导审批。
        审批类型:可设置为指定人员或角色,或者由发起人自行选择。
        审批方式:依次审批(顺序审批)、会签(需所有审批人同意)、或签(一名审批人同意或拒绝即可)。
        按钮配置:默认为提交和退回按钮,用户也可根据业务需求自行配置。
        抄送人:可根据需求在审批节点上设置抄送人,同时可设置抄送的条件,如仅在审批同意时抄送。流程发起并执行至该节点后系统会将该条流程相关的信息抄送给的指定的人员或角色。
        
        图3.2-2 审批节点配置示例
(3)高级设置
         高位审批:即当同一个流程中有相同处理人时,可以通过高位审批策略的设置直接跳过该审批人的其他审批节点,将其审批次数简化为一次。
         撤回审批:用户可以通过撤回审批功能,将已经提交的流程撤回。如:A点击提交后流程流转至下一个审批人B,但A发现提交信息有误(此时B必须是未审批状态),则A可以使用撤回功能将流程重新撤回至A审批的节点,修改后可重新提交。
         过期处理:可在审批节点设置该节点的过期处理方式。如:设置审批节点过期时间为3天,则当该节点审批人3天后未审批,系统自动跳过该节点走向下一个审批节点。
         (4)校验机制
         设计器提供自动校验功能,在流程设计过程中如有错误或不完整的设置,系统会给出相应提示帮助用户正确的完成设置,以提高系统的准确性和易用性。
3.3 自定义流程部署实现
        自定义流程基于Flowable流程引擎实现部署,后端提供Rest接口实现所有流程操作,包括流程更新部署、流程发起、审批、废弃等。
        在前端应用完成流程设计之后,设计器会将流程模型转化为JSON数据对象,后端将该JSON对象解析成Flowable Process对象,最后再将Process对象转成Bpmn.XML进行部署操作。具体流程如下:
        (1)生成事件
        类型为开始的节点,创建一个开始事件(StartEvent)对象,同时生成一个默认用户任务(UserTask)和一条从开始节点到默认用户任务的连线,添加至Process对象。
        类型为结束的节点,直接创建一个结束事件(EndEvent)对象添加至Process对象。
        (2)生成任务节点
        生成任务节点首先会创建一个用户任务(UserTask)对象,同时根据JSON数据对象的设置,对节点名称、输入和输出流的顺序流(SequenceFlow)、审批人、审批条件等进行设置,并添加至Process对象。
        (3)生成网关
        系统仅使用排他网关( ExclusiveGateway),需要遍历其子节点找到网关的所有输入和输出顺序流,最后找到网关的结束节点进行节点聚合,相较于事件和任务的生成,网关的生成会更复杂。
        (4)生成顺序流
        在节点、事件和网关的生成过程中,顺序流需要同步生成Id、Name、SourceRef、TargetRef四个属性并进行设置,如果是网关的输出流则需要设置流转条件(ConditionExpression)属性。
        经过上述过程的转换,即可将JSON数据对象转换为标准的BPMN2.0对象,使流程符合标准。
        4.总结与展望
        在遵循BPMN2.0标准的前提下,结合中国式复杂流程需求,运用自定义流程设计系统,让用户无需专业的流程知识培训和程序开发经验,即可快速的进行流程设计、部署和运行,真正实现开箱即用、快速上手和快速响应,从而大大降低学习成本、运维成本、研发成本以及测试成本。为企业在数字化转型过程中不断变化的业务和流程,提供更有力的支撑和保障。
        在后续的研究和应用中,还可将流程设计与表单可视化设计进一步的结合,同时增加流程的自动化测试,进一步的提高效率,成为企业有效的生产力工具。
        
        参考文献
[1] OMG.Business Process Model and Notation (BPMN) Version 2.0 [EB/OL]. http://www.omg.org/spec/BPMN/2.0.
[2] 赵莹, 赵川, 黄苾, et al. BPMN2.0过程模型的语义和分析[J]. 计算机科学, 2018, 45(0z2):558-563.
[3] https://cn.vuejs.org/v2/guide/
[4] 赵赛, 韩坤, 张廷. 基于Flowable工作流的高校办公系统的设计与实现[J]. 安徽广播电视大学学报, 2020, No.189(02):95-99.z`

--------------------------------------
         作者简介:金怡成(1993- ),男,浙江杭州,中国电建集团华东勘测设计研究院有限公司,硕士,研究方向:企业信息化。
       
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: