从审批流到bpmn-js入门

简介: 公司内部由于需要很多审批地方,一开始采用邮件或者企业微信进行口头审批,一般会抄送相关人员,以达到初步审批的效果,但是随着审批越来越复杂,比如有时候需要驳回或者转接,甚至需要调用其他系统接口继续流程的时候,就很麻烦,因此迫切需要一个工作流去解决审批相关事情。

背景


公司内部由于需要很多审批地方,一开始采用邮件或者企业微信进行口头审批,一般会抄送相关人员,以达到初步审批的效果,但是随着审批越来越复杂,比如有时候需要驳回或者转接,


甚至需要调用其他系统接口继续流程的时候,就很麻烦,因此迫切需要一个工作流去解决审批相关事情。

选型


在选型前,我们需要知道工作流是什么?

是什么


工作流就是通过计算机技术对业务流程进行自动化管理。实现多个参与者按照预定的流程去自动执行业务流程。

工作流定义: 通过计算机对业务流程自动化执行管理

再通俗一点,工作流就是通过程序去自动实现平时需要人工操作的流程节点,所以工作流能解决的问题一定是可以被流程化的问题。

然而这一过程被大家统称为业务流程建模,通常对已经存在复杂问题进行模型化的抽象,通过模型来推导解决问题的方案。

基础概念


BPM


BPM(Business Process Management), 业务流程管理,是指的在工作流的基础上,基于业务流程建模,支持业务流程的分析、建模、模拟、优化、协同与监控等功能的新一代企业应用系统核心。


简单点说,BPM其实一个业务流程管理系统的统称,不单单可以实现审批流,还可以实现各种更为复杂的业务流程,如:数据同步等。

BPMN


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


更加容易理解的说,BPMN是实现BPM的一套标准,制定很多建模符号标准。


这里简单比喻一下,BPMN是一门语言,你可以用它去开发BPM系统。


后面会更加详细讲解 BPMN 的基础知识。


建模符号了解,可以放到下一章节分享。

工作流引擎选型


由于BPMN是市面主流的工作流标准, 那么市面绝大部分工作流引擎都是基于该标准去实现。下面罗列一下目前市面上主流的各种引擎:

1.Osworkflow,一个轻量化的流程引擎,基于状态机机制,但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定难度,如果流程比较简单,osworkflow是很好的选择但该开源组件已过时,长时间没有版本升级了。

2.JBPM, 以JBPM4版本作为分割点,JBPM5以后版本基于Drools Flow, JBPM4已停止维护,也不建议选择。

3.Activiti, activiti5和activiti6是基于JBPM4开源,activiti7是基于6升级的,内核基本不变,但是由于Tijs Rademakers离开,谨慎选择。

4.flowable, 基于activiti6衍生出来的版本,以flowable6.4.1版本为分水岭,大力发展其商业版产品,开源版本维护不及时,部分功能已经不再开源版发布,可以考虑选择。

5.Camunda, Camunda基于activiti5,所以其保留了PVM,商业版本和开源版本功能相差不大,建议选择。

流程设计器选型


对于低代码平台中的流程可视化,流程设计器是重要的支撑工具,目前市场上比较主流的流程:

  • bpmn-js,是 BPMN 2.0 渲染工具包和 Web 模型,使用 Web 建模工具可以很方便的构建 BPMN 图表,可以把 BPMN 图表嵌入到你的项目中,容易扩展。
  • mxGraph是一个强大的JavaScript流程图前端库,由于mxGraph是一个开放的js绘图开发框架,我们可以开发出很炫的样式,或者完全按照项目需求定制。
  • [Activiti-Modeler] Activiti 开源版本中带了web版流程设计器,界面不美观,用户体验差
  • [flowable-modeler]flowable开源版本中带了web版流程设计器,界面不美观,用户体验差

建议选型


推荐大家使用Camunda(流程引擎)+bpmn-js(流程设计器)组合。

快速部署


选型后就是实战,推荐的选型都有很完整的安装部署文档,下面简单说一下部署步骤。

再次说明一下两者的区别:

  • Camunda是工作流引擎,用来执行工作流模型文件任务,同时管理各种流程执行。
  • bpmn-js是前端的流程设计器,基于bnpm标准实现,用来生成工作流模型文件。

Camunda部署


1.docker快速安装后端:

docker pull camunda/camunda-bpm-platform:run-latest
docker run -d --name camunda -p 8080:8080 camunda/camunda-bpm-platform:run-latest

2.通过spring boot快速创建项目: 更新pom.xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.tencent</groupId>
    <artifactId>camunda_spring_boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>camunda_spring_boot</name>
    <description>camunda_spring_boot</description>
    <properties>
        <java.version>17</java.version>
        <camunda.spring-boot.version>7.15.0</camunda.spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
            <version>${camunda.spring-boot.version}</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3.修改登录用户配置, application.properties

camunda.bpm:
  admin-user:
    id: demo
    password: demo
    firstName: Demo
  filter:
    create: All tasks

4.将bpmn-js操作好的xml文件保存到src/main/resources/loan-approval.bpmn

运行程序,访问http://localhost:8080/camunda/app/cockpit/default/#/dashboard,就可以看到相关任务。

后面是运行任务等,就不属于入门教程,可以放到后面教程慢慢学习。

bpmn-js部署


demo访问, 快速使用,代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  <title>BPMNJS测试案例</title>
  <!-- 引入BPMN-JS的CSS文件 -->
  <link rel="stylesheet" href="https://unpkg.com/bpmn-js@11.1.0/dist/assets/diagram-js.css" />
  <link rel="stylesheet" href="https://unpkg.com/bpmn-js@11.1.0/dist/assets/bpmn-font/css/bpmn.css" />
</head>
<body>
  <div id="canvas" style="height:80vh;"></div>
  <!-- 引入BPMN-JS的JS文件 -->
  <script src="https://unpkg.com/bpmn-js@11.1.0/dist/bpmn-modeler.development.js"></script>
  <!-- xml文件 -->
  <script src="./bpmn.js"></script>
  <script>
    var bpmnModeler = new BpmnJS({
      container: '#canvas'
    });
    bpmnModeler.importXML(xml, function(err) {
    if (err) {
        return console.error('failed to load diagram', err);
      }
    });
  </script>

总结


BPNM是大家统一认知的业务流建模标准,实现它的工作流引擎有很多,经过选型最终确定使用camunda + bpmn-js


简单尝试一下,还是很简单实现了一个简单工作流管理系统,从设计工作流到工作流执行。


如果要真正用起来,还是需要发心思去了解BPNM的整体标准,以及camunda是如何运作执行

的,同时需要将bpmn-js流程设计器。

参考资料

camunda Spring Boot项目

全网最详bpmn.js教材-http请求篇

目录
相关文章
|
1月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
282 2
|
15天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
15天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
25 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
24天前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
60 10
|
21天前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
2月前
|
JavaScript 前端开发 小程序
一小时入门Vue.js前端开发
本文是作者关于Vue.js前端开发的快速入门教程,包括结果展示、参考链接、注意事项以及常见问题的解决方法。文章提供了Vue.js的基础使用介绍,如何安装和使用cnpm,以及如何解决命令行中遇到的一些常见问题。
一小时入门Vue.js前端开发
|
1月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
1月前
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
24 1
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
456 1
|
1月前
|
Web App开发 JSON JavaScript
深入浅出:Node.js后端开发入门与实践
【10月更文挑战第4天】在这个数字信息爆炸的时代,了解如何构建一个高效、稳定的后端系统对于开发者来说至关重要。本文将引导你步入Node.js的世界,通过浅显易懂的语言和逐步深入的内容组织,让你不仅理解Node.js的基本概念,还能掌握如何使用它来构建一个简单的后端服务。从安装Node.js到实现一个“Hello World”程序,再到处理HTTP请求,文章将带你一步步走进Node.js的大门。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往后端开发新世界的大门。
下一篇
无影云桌面