「Activiti精品 悟纤出品」流程模型搭建-小试牛刀 - 第324篇

关历史文章(阅读本文前,您可能需要先看下之前的系列👇

国内最全的Spring Boot系列之三

2020上半年发文汇总「值得收藏」

RocketMQ安装Linux/Mac/Window - 第318篇

程序CPU占用率飙升,如何定位线程的堆栈信息?「超详细,值得收藏」看不懂还有配套视频 - 第319篇

「工作流Activiti」介绍-新手上路,注意安全 - 第320篇

「Activiti精品 悟纤出品」activiti介绍-十万个为什么 - 第321篇

「Activiti精品 悟纤出品」Activiti6 Getting Started- 稳扎稳打 - 第322篇

「Activiti精品 悟纤出品」Activiti7 Getting Started-摸石头过河 - 第323篇
 

师傅:环境准备好了,那我们这一节来讲讲怎么构建一个流程模型吧,这一节有点烧脑,请带上耳朵认真的进行听讲。

悟纤:师傅,我已经时刻准备着,奋战到天亮了。

师傅:好样的,学习就应该有这份决心,废话不多说,让我们开始进入正题吧。

 

前言

       基本环境搭建好了,我们可以简单搭建一个模型来体验下。我们在前面开始的章节说过Activiti是基于BPMN,所以要构建一个流程模型,对于BPMN的一些建模元素还是要所有了解的。所以本节的主要内容就是:

(1)BPMN的简单介绍;

(2)使用Activiti进行构建一个流程模型;

 

一、BPMN

1.1 BPMN是一种流程建模的通用和标准语言

       BPMN是一门符号语言。就像任何语言的目的一样,BPMN是为了方便沟通。旨在促进业务流程的沟通和理解。使用BPMN建模的目的是运用BPMN来绘制流程图,以便更好地让各部门之间理解业务流程和相互关系。BPMN 2.0的最大优势之一是消除了业务人员和IT技术人员之间沟通沟壑。

       记住这句话就足够笑傲江湖了:BPMN是一种流程建模的通用和标准语言

 

1.2 BPMN = 图形表达 + XML

       BPMN2.0通过引入XML,使BPMN不仅仅是一个漂亮的图形表达,更能够描述业务流程间很多含糊不清的问题。通过XML来定义每个BPMN对象,使BPMN规范地保证每个图形,无论是流程模型还是所有在流程模型中的对象,都能清晰地进行表述。不过大家不用担心,BPMN流程设计器能够自动生成XML。

 

1.3 流程模型与BPM软件

       由于采用了通用的语法,许多工作流建模工具和流程引擎支持BPMN。因此,许多不同的软件套件可以共享和处理BPMN的流程文件。BPMN 2.0为建模工具、流程引擎、业务活动监控(BAM)工具和其他业务工具,提供了交流沟通的渠道。通过BPMN 2.0,流程模型可以无缝地传输在不同厂商的 BPM软件中。

 

1.4 三个基本建模元素

       大多数流程并不需要建模者了解整个规范。只要了解以下 三个基本建模元素,就能掌握BPMN2.0的核心。

(1)事件符号;(2)活动符号;(3)网关符号

1.4.1 事件(Event)

让我们来看看在三种主要类型的事件:

(1)开始 - 表示一个流程的开始。

(2)中间 - 发生的开始和结束事件之间,影响处理的流程。

(3)结束 - 表示该过程结束。

 

这些是很简单的,但要有一点重要的要记住。如果您添加一个信封的图标给上述任何某个事件,那你将触发一个消息事件(Message Event)。即可以是由一个消息的到达而启动一个进程,也可以是在中间的某个位置与中间事件中发送一个消息(或捕获消息),或者可以在一个过程结束时发送的消息。

1.4.2 活动(Activity)

       一个活动是工作或任务的一个通用术语。首先,一个活动可以是原子或非原子(组合活动)。换句话说,一个活动可以是一个任务,或者它可以是一个当前流程的子处理流程;其次,你还可以指定不同类型的活动。例如,任务可以是需要人工完成的任务,也可以自动完成的任务,比如由脚本完成的任务,或服务任务(交由web服务器处理的指令)。

1.4.3 网关(Gateway)

网关用来处理决策,有两种常用网关需要了解:

(1)排他型(X) ——这种决策分支通常根据一定的条件,通过顺序流来决定流程走向。通常,只有一条路径会被选择。

(2)并行型 (+) ——这种决策分支指代一个路径或多个路径合并后被分割成两个或多个平行的路径。所有路径会被同时选择。

 

1.5 描述性建模符号

描述性建模子类则让BPMN更丰满。

(1)泳道(Pool):代表流程中的参与者,用来对活动进行组织和分类)

(2)泳池 (Lane):泳道里的一个子划分

(3)信息流(message flow) - 虚线表示

(4)数据对象和仓库

(5)文本注释

1.6 Activit建模器

从这个建模器也可以看出这个BPMN的一些核心的建模元素。

 

1.7 BPMN常用建模工具

介绍几个可供选择的建模工具:

(1)bpmn-js

bpmn官放提供的开源建模工具bpmn-js,支持基本的模型设计,但缺少属性配置,不过可能是故意这样设计的,这个工具主要是给activiti开发者进行二次开发。

https://demo.bpmn.io/

(2)YaoqiangBPMN Editor

       yaoqiang用java开发的bpmn设计器,由于是java开发,所以支持跨平台。

http://www.yaoqiang.org/

(3)actiBPM

       actiBPM,idea插件。

(4)activitidesigner

       activiti designer 是一个eclipse插件。它跟随activiti一起发布。

 

1.8 more…

       本文这里只是一个基本的介绍了下BPMN,想要更多的学习,还需要自己进行深入学习,这里提供一些学习资料:

(1)2019最详细Activiti6.0之BPMN2.0规范

http://www.uml.org.cn/modeler/201907312.asp?artid=22245

(2)bpmn2.0文档

https://gitee.com/Flowable_BPMN/docs

 

2.1 说明

       这里我们创建一个请假流程模型:部门的任何一个人发起都需要领导进行审批。

(1)有三个用户:张三、李四、悟纤(领导);

(2)张三和李四都是IT部门的,他们的领导是悟纤;

       所以一个流程包括如下几个方面:

(1)用户和用户组;

(2)流程模型以及流程的发起者和处理者;

(3)流程表单;

 

2.2 创建用户

我们的流程里需要有用户进行参与,所以需要进行创建用户:

       点击“Identitymanagement”进行用户和组的管理。

       在“Users”进行创建用户:

       依次创建张三、李四、悟纤三个用户,那么创建完之后的结果是:

       其中admin是系统默认的用户。

2.3 创建用户组

       在“Users”旁边就是“Groups”,点击进行创建:

       创建完成之后,把张三和李四添加到技术部中:

2.4 创建一个新的流程模型

2.4.1 创建模型

进入activiti-app,进入Kickstar App->Create Process创建新的流程模型,需要输入模型名称和模型主键,这个主键必须唯一,代码中发起流程需要用到:

       另外这里也支持直接导入已经创建好的流程模型。

2.4.2 搭建请假流程

       使用左边的元素进行创建出来一个如下的模型:

(1)开始 : Start Events –Start event;

(2)提交审批、部门审批:Activities– User task;

(3)结束:End Events – Endevent;

       另外在每个元素进行设置Id和name属性,就可以看到上面截图的效果了:

2.4.3 分配模型处理人

       单击Assignments时,显示如下图所示:

对于提交审批截图下:

       对于部门审批如下:

2.4.4 流程表单设计

       请假是需要提交个请假表单的,请假时间和请假事由。

     点击“Processes”旁边的Forms进行创建表单。

       我们先创建一个请假表单:

       创建好一个表单之后,需要进行构建这个表单里的元素,比如:

       最后应该是这样子:

       另外我们还需要一个领导审批表单:

2.4.5 流程绑定表单

       将流程和表单进行绑定,回到Processes中,进行绑定:

       点击“Referenced form”:

       将提交审批的流程节点绑定员工请假表单;将部门审批绑定到领导审批单。

2.5 流程发布

       到上面我们的流程模型已经创建了,我们可以创建一个App跑一下我们的这个流程。

2.5.1 创建模型

       在“Processes”的最右边有一个“Apps”,进入,点击“Create App”进行创建App:

2.5.2 将应用和流程绑定

       将我们的应用和流程进行绑定。

       记得记得保存。绑定之后的效果:

2.5.3 发布流程

       绑定之后就可以点击“Publish”:

2.5.3 发布结果

发布完成后回到首页可以看到发布结果:

2.6 流程测试

2.6.1 流程说明

       这里我们需要使用张三或者李四进行登录,然后提交审批单,这个审批单就会到上一节悟纤进行审批。

2.6.2 发起请假任务

(1)登录“zhangsan”账号,进入请假App:

(2)在“Processess”, 点击“Startprocess”开始一个流程:

       Show diagram查看流程当前流转状态(当前的状态被标绿了):

       Cancel process就是取消流程了。

       还有一个地方可以进行编辑,就是“提交申请”这里,进入是:

点击 complete, 任务流转到下一个流程节点。这个任务就流转到到了部门经理了。

 

2.6.3 审批流程

       使用“wuqian”账号进行登录,点击“请假”App,然后”Tasks”可以看到提交上来的任务:

       点击“Claim”进行审批操作:

       至此流程流程。

2.7 流程管理activiti-admin

activity-admin应用提供一些基本的流程运行时管理功能,可以查看当前运行的所有实例和任务,也可以上传流程文件。

2.7.1 登录

访问地址为http://localhost:8080/activiti-admin,默认账号为 admin/admin,登录。

2.7.2 配置应用服务节点

       进入“Configuration”,然后点击“EditActiviti REST endpoint”进行配置应用服务节点:

       然后点击“CheckActiviti REST endpoint”,查看状态是否是:

Endpoint valid,Engine at endpoint: default – 6.0.0.4。

2.7.3查看历史流程记录

       点击“Tasks”可以查看历史流程记录:

2.8 流程模型的XML

       最后我们要知道我们的这个流程模型是由一堆的XML构成的,可以下载到本地进行查看(可以导出也可以导入):

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
  <process id="Leave" name="请假流程" isExecutable="true">
    <documentation>请假流程定义</documentation>
    <startEvent id="start" name="开始"></startEvent>
    <userTask id="submit" name="提交申请" activiti:candidateGroups="it" activiti:formKey="leaveForm">
      <extensionElements>
        <modeler:group-info-name-it xmlns:modeler="http://activiti.com/modeler"><![CDATA[技术部]]></modeler:group-info-name-it>
        <modeler:activiti-idm-candidate-group xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-candidate-group>
        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
    </userTask>
    <userTask id="deptApprove" name="部门审批" activiti:candidateUsers="wuqian" activiti:formKey="approveForm">
      <extensionElements>
        <modeler:user-info-email-wuqian xmlns:modeler="http://activiti.com/modeler"><![CDATA[wuqian@163.com]]></modeler:user-info-email-wuqian>
        <modeler:user-info-firstname-wuqian xmlns:modeler="http://activiti.com/modeler"><![CDATA[悟]]></modeler:user-info-firstname-wuqian>
        <modeler:user-info-lastname-wuqian xmlns:modeler="http://activiti.com/modeler"><![CDATA[纤]]></modeler:user-info-lastname-wuqian>
        <modeler:activiti-idm-candidate-user xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-candidate-user>
        <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
    </userTask>
    <sequenceFlow id="sid-7B016F7C-1A5F-4233-ACFF-9461C7BD1499" sourceRef="start" targetRef="submit"></sequenceFlow>
    <sequenceFlow id="sid-64AC564C-E7EB-4A56-AE62-AAE075FF2704" sourceRef="submit" targetRef="deptApprove"></sequenceFlow>
    <endEvent id="end" name="结束"></endEvent>
    <sequenceFlow id="sid-E33E0C42-AD11-418C-A7C4-20A1F88C81A8" sourceRef="deptApprove" targetRef="end"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_Leave">
    <bpmndi:BPMNPlane bpmnElement="Leave" id="BPMNPlane_Leave">
      <bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
        <omgdc:Bounds height="30.0" width="30.0" x="60.0" y="160.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="submit" id="BPMNShape_submit">
        <omgdc:Bounds height="80.0" width="100.0" x="180.0" y="135.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="deptApprove" id="BPMNShape_deptApprove">
        <omgdc:Bounds height="80.0" width="100.0" x="420.0" y="135.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
        <omgdc:Bounds height="28.0" width="28.0" x="675.0" y="161.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sid-64AC564C-E7EB-4A56-AE62-AAE075FF2704" id="BPMNEdge_sid-64AC564C-E7EB-4A56-AE62-AAE075FF2704">
        <omgdi:waypoint x="280.0" y="175.0"></omgdi:waypoint>
        <omgdi:waypoint x="420.0" y="175.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-E33E0C42-AD11-418C-A7C4-20A1F88C81A8" id="BPMNEdge_sid-E33E0C42-AD11-418C-A7C4-20A1F88C81A8">
        <omgdi:waypoint x="520.0" y="175.0"></omgdi:waypoint>
        <omgdi:waypoint x="675.0" y="175.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-7B016F7C-1A5F-4233-ACFF-9461C7BD1499" id="BPMNEdge_sid-7B016F7C-1A5F-4233-ACFF-9461C7BD1499">
        <omgdi:waypoint x="90.0" y="175.0"></omgdi:waypoint>
        <omgdi:waypoint x="180.0" y="175.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

       对于这个XML这里就不展开了,此文章篇幅已经超负载了。

 

悟纤小结

师傅:这一篇介绍的有点多了,通过两天的时间,才把这些知识点梳理出来的。

悟纤:师傅,你辛苦了,你坐着休息下,我来总结下内容。

(1)BMPN:BPMN是一种流程建模的通用和标准语言。

(2)使用Activit6构建一个流程模型并且运行起来。

① 创建用户和用户组:用来进行流程的发起和操作的,比如提交审批单和审核审批单的人。

② 创建流程模型:就是使用BPMN进行构建出来一个流程,主要是配置id和name属性;然后流程需要分配发起人和操作人,也就是上面的创建的用户和用户组;最后就是创建表单,将表单和流程进行绑定。

③ 流程发布:创建App将我们的流程和app绑定。

④ 使用我们的用户进行登录,然后测试流程。

⑤ 对于activiti-admin进行配置,可以看到我们的历史流程记录。

       这一节介绍的有点难,大家自己进行操作然后消化下。

 

我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。

学院中有Spring Boot相关的课程:

à悟空学院:https://t.cn/Rg3fKJD

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战:http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

深入理解JVM内存模型/调优实战:http://t.cn/A6wWMVqG

 

悟纤 CSDN认证博客专家 知远公司创始人 架构师 访问1000万+
「公众号SpringBoot」:
①阿里巴巴前高级研发工程师;②估值20亿美金的Blued架构师;③北京知远公司创始人;④浙江甄才公司架构师;⑤云课堂学员10000+;⑥博客访问量1000万+;⑦10年互联网行业从业;⑧340万的访问《从零开始学SprngBoot》作者;⑨技术加盟多个独立项目。
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值