什么是工作流程,工作流相关数据分为哪几类

虽然现在基本上能满足日常的需求,但感觉还不够智能,还有很多的优化空间,所以正好借此机会,详细了解了一些完善工作流引擎框架,以及在架构设计上需要注意的点,形成了这篇文章,分享给大家。

什么是工作流

先看一下维基百科对于工作流的定义:

工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算。

工作流要解决的主要问题是:为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

简单来说,工作流就是对业务的流程化抽象。WFMC(工作流程管理联盟) 给出了工作流参考模型如下:

什么是工作流程,工作流相关数据分为哪几类

同样属于复杂节点,其任何一个子节点处理完成后,都可以进入到下一个节点。

条件判断 什么是工作流程,工作流相关数据分为哪几类

审批节点的审批人需要动态获取,并且可配置。

审批人的获取方式可以分以下几种:

固定审批人从申请表单中获取根据组织架构,动态获取从配置的角色组或者权限组中获取撤销和驳回 什么是工作流程,工作流相关数据分为哪几类

接下来,我们就把这个文件传给流程引擎,让它基于该文件,创建一个工作流。

RepositoryService repositoryService = processEngine.getRepositoryService();Deployment deployment = repositoryService.createDeployment() .addClasspathResource(“holiday-request.bpmn20.xml”) .deploy();复制代码

创建后,实际就写到内存数据库 h2 了,我们还可以把它查出来:

ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .deploymentId(deployment.getId()) .singleResult();System.out.println(“Found process definition : ” processDefinition.getName());复制代码创建工作流实例

创建工作流实例,需要提供一些输入参数,比如我们创建的员工请假流程,参数就需要:员工姓名、请假天数、事由等。

Scanner scanner= new Scanner(System.in);System.out.println(“Who are you?”);String employee = scanner.nextLine();System.out.println(“How many holidays do you want to request?”);Integer nrOfHolidays = Integer.valueOf(scanner.nextLine());System.out.println(“Why do you need them?”);String description = scanner.nextLine();runtimeService runtimeService = processEngine.getRuntimeService();Map variables = new HashMap();variables.put(“employee”, employee);variables.put(“nrOfHolidays”, nrOfHolidays);variables.put(“description”, description);复制代码

参数准备好后,就可以传给工作流了:

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(“holidayRequest”, variables);复制代码

此时,就会根据流程定义里的:

复制代码

创建一个任务,任务有个标签,就是 candidateGroups,这里的 managers,可以猜得出,是给 managers 建了个审批任务。

查询并审批任务

基于 manager 查询任务:

TaskService taskService = processEngine.getTaskService();List tasks = taskService.createTaskQuery().taskCandidateGroup(“managers”).list();System.out.println(“You have ” tasks.size() ” tasks:”);for (int i=0; i<tasks.size(); i ) { System.out.println((i 1) “) ” tasks.get(i).getName());}复制代码

审批任务:

boolean approved = scanner.nextLine().toLowerCase().equals(“y”);variables = new HashMap();variables.put(“approved”, approved);taskService.complete(task.getId(), variables);复制代码

这里就是把全局变量 approved,设为了 true,然后提交给引擎。引擎就会根据这里的变量是 true 还是 false,选择走不同分支。如下:

复制代码回调用户代码

审批后,就会进入下一个节点:

复制代码

这里有个 class,就是需要我们自己实现的:

什么是工作流程,工作流相关数据分为哪几类

官方网站:jgraph.github.io/mxgrap

bpmn-js

bpmn-js 是 BPMN2.0 渲染工具包和 Web 模型。bpmn-js 正在努力成为 Camunda BPM 的一部分。bpmn-js 使用 Web 建模工具可以很方便的构建 BPMN 图表,可以把 BPMN 图表嵌入到你的项目中,容易扩展。

bpmn-js 是基于原生 js 开发,支持集成到 vue、react 等开源框架中。

什么是工作流程,工作流相关数据分为哪几类

官方网站:bpmn.io/

以上介绍的都属于是功能强大且完善的框架,除此之外,还有其他基于 Vue 或者 React 开发的可视化编辑工具,大家也可以根据自己的实际需求进行选择。

流程引擎

最后来说说流程引擎,整个系统的核心。引擎设计的好坏决定了整个系统的稳定性,可用性,扩展性等等。

什么是工作流程,工作流相关数据分为哪几类

整体架构如图所示,主要包括一下几个部分:

一、流程设计器主要通过一系列工具创建一个计算机可以处理的工作流程描述,流程建模通常由许多离散的节点步骤组成,需要包含所有关于流程的必要信息,这些信息包括流程的起始和结束条件,节点之间的流转,要承担的用户任务,被调用的应用程序等。

二、流程引擎主要负责流程实例化、流程控制、节点实例化、节点调度等。在执行过程中,工作流引擎提供流程的相关信息,管理流程的运行,监控流程的运行状态,并记录流程运行的历史数据。

三、存储服务提供具体模型及流程流转产生的信息的存储空间,工作流系统通常需要支持各种常见的数据库存储。

四、组织模型不属于工作流系统的建设范围,但流程设计器在建模的过程中会引用组织模型,如定义任务节点的参与者。还有就是在流程流转的过程中同样也需要引用组织模型,如在进行任务指派时,需要从组织模型中确定任务的执行者。

工作流引擎内部可以使用平台自身的统一用户组织架构,也可以适配第三方提供的用户组织架构。

五、工作流引擎作为一项基础支撑服务提供给各业务系统使用,对第三方系统开放标准的 RESTful 服务。

后记

下面来说说我现在开发的系统支持到了什么程度,以及未来可能的发展方向。由于毕竟不是一个专门的工单系统,工单申请也只是其中的一个模块,所以在整体的功能上肯定和完整的工作流引擎有很大差距。

第一版

第一版并没有流程引擎,开发方式简单粗暴,每增加一个流程,就需要重新开发对应的表和业务代码。

这样做的缺点是非常明显的:

每个流程需要单独开发,工作量大,开发效率低流程功能相近,代码重复量大,冗余,不利于维护定制化开发,缺少扩展性#第二版

第二版,也就是目前的版本。

随着工单流程逐渐增多,工作量逐渐增大,于是开始对流程进行优化,开发了现阶段的工作流引擎。

什么是工作流程,工作流相关数据分为哪几类

在新增一个工单流程时,需要先进行工作流配置,配置其基础信息,自定义字段,状态和流转这些信息。还支持配置自动化节点,可以根据条件由程序自动完成相关操作并审批。

配置好之后,后端无需开发,由统一的引擎代码进行处理,包括节点审批流转,状态变更等。只需要开发前端的创建和查询页面即可,相比于第一版,已经在很大程度上提高了开发效率。

目前版本需要优化的点:

缺少可视化流程设计器,无法做到拖拽式设计流程节点之间状态流转不够灵活缺少分布式事物支持,以及异常处理机制下一个版本

针对以上不足,下一个版本准备主要优化三点,如下:

需要支持可视化流程设计器,使流程设计更加简单,灵活根据流程配置自动生成前端页面,做到新增一种类型的工单,无需开发增加节点自动化能力,异常处理机制,提高系统的稳定性

本文来自作者:zz1080,不代表小新网立场!

转载请注明:https://www.xiaoxinys.cn/479781.html

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