activiti7(一):思想指导实践——BPMN2.0规范

背景

我们都知道用acitiviti进行开发的一个基本流程是:

1)使用bpmn符号画业务流程图——》对业务流程进行建模

2)部署业务流程——》将画好的业务流程图交给工作流引擎解析执行

3)启动流程实例

4)查询待办任务

5)办理待办任务(④、⑤可能会循环好几遍)

6)流程结束

第一步就是画流程图,但如果对bpmn符号不熟悉,画不出来流程图,就无法开展接下来的工作。一些特殊的业务流程,需要特殊的bpmn符号来处理,如果不知道这个bpmn符号的话,开发思路就会受到限制。所以无论是作为工作流开发任务还是业务人员,都有必须先了解一下bpmn规范。

前言

个人认为activiti工作流引擎要分为两部分学习,第一个是BPMN2.0规范,第二个是activiti框架本身。他俩的关系是一个定义了规范,一个负责规范的实现,就好比JMS和ActiveMQ的关系、JDBC和各种数据库连接驱动的关系一样,先有规范后有具体的实现。规范通俗点讲,就是一个大家商量好的共同去遵守的东西,就跟各种协议似的。学会了规范再看具体实现的时候,思路脉络就会很清晰,就能知其所以然了。在计算机世界里面,规范很重要。

一、BPMN2.0介绍

BPMN2.0(Business Process Model And Notation,业务流程模型和符号),是一种业务流程建模规范,提供了一套对业务流程建模的标记语言。起初由BPMI(The Business Process Management Initiative)在2004年推出BPMN1.0版本,后BPMI并入到OMG组织,OMG于2011年推出BPMN2.0标准。BPMN的主要目标是提供一套被所有业务用户容易理解和使用的标准符号,利用这些符号将业务流程建模简单化、图形化,将复杂的建模过程视觉化,让业务建模者、业务实施人员、管理监督人员对BPMN描述的业务流程有一个更加清晰明了的认识。从业务流程建模分析到流程的实现,直到最终用户的管理监控,BPMN2.0都贯穿其中。可以说BPMN在业务流程设计(业务流程图)与流程实现(工作流引擎)之间搭建了一条标准化的桥梁。一句话BPMN2.0帮助我们规范的画流程图。

ps:

bpmn2.0有一个很大的符号集合,如果业务流程比较简单,只需要了解几个关键的符号即可,当已知的bpmn符号无法满足业务需求时,再去学习更多的bpmn符号也不迟。

下面对bpmn符号进行一下简单介绍。

二、BPMN2.0规范的基础元素

大致分为四类:

1、流对象(Flow Objects):包括事件、活动、网关,是BPMN中的核心元素。

1.1、事件

作用:用于对流程生命周期中发生的事件进行建模。

分类:

1.1.1 开始事件:开始事件指示流程从何处开始。

    1)空开始事件

定义:没有启动事件,需要调用startProcessInstanceByXXX方法执行该空开始事件。

图形表示

XML表示

<startEvent id="start" name="my start event" />

1.1.2 中间事件:

1.1.3 结束事件:标志着流程的结束。

   1)空结束事件

定义:没有结束事件,当流程引擎检测到执行到该空结束事件时会自动执行,已结束整个流程。

图形表示

xml表示

<endEvent id="end" name="my end event" />

4)边界事件:

1.2任务(活动)

定义:任务表示流程中具体要做的事情,通常一个任务表示工作需要被外部实体完成,比如人工任务和自动服务。

图形表示:任务通常有圆角矩形表示,内部文字为任务名称或描述,左上角的图标表示任务类型。

分类:

1.2.1 人工任务(user task)

定义:

最典型的任务。需要由人工来完成的任务,比如请假审批、财务审核等。

图形符号

xml表示

id是必须的,name是可选的,通过documentation元素对任务进行描述。任何bpmn2.0元素都可用documentation元素进行描述。

<userTask id="theTask" name="Schedule meeting" > <documentation> Schedule an engineering meeting for next week with the new hire. </documentation> </userTask>

到期日

可通过dueDate字段设置任务的到期时间。

用户分配

人工任务可分配给三种人:assignee(办理人、受让人),candidate(候选人),candidateGroup(候选人组)

》assignee是任务的实际办理人,任务只能同时有一个办理人。

》任务可以有多个候选人,每个候选人都能看到该任务,候选人需要claim(拾取)任务成为assignee后,才能进行任务的办理,任务被拾取后其他候选人就看不到该任务了。候选人在拾取任务后可以unclaim,将任务归还,此时其他候选人可以看到并claim任务。

》不想单独指定多个候选人,可以指定一个候选人组,一般为角色ID。

分配方式有三种:

1)画图时写死。

2)通过UEL表达式动态设置。

3)通过TaskListener监听器指定。

1.2.2 java服务任务(service task)

定义:

用于调用外部Java代码。

图形符号

xml表示

<serviceTask id="javaService" name="My Java Service Task" activiti:class="org.activiti.MyJavaDelegate" />

1.2.3 脚本任务(script task)

定义:

用于执行脚本文件(如javascript)

图形符号

xml表示

<scriptTask id="theScriptTask" name="Execute script" scriptFormat="groovy"> 
    <script> 
        sum = 0 
        for ( i in inputArray ) { 
            sum += i 
        } 
    </script> 
</scriptTask>

1.2.4 web服务任务

:用于调用外部web接口服务。

1.2.5 邮件任务(acticiti专有,非BPMN2.0规范)

:用于发送邮件。

还有手工任务、java接收任务、shell任务等。

1.3网关(节点)

作用:用来控制流程的流向。

图形表示:网关通常以菱形图形表示,内部带有一个图标。该图标显示网关的类型。

分类:

1.3.1 排他网关(exclusiveGateway)

定义

也叫XOR网关,对所有的传出分支进行条件判断,仅选择一个条件为true的分支执行,当有多个分支条件满足时,默认执行xml中定义的第一个。若多个分支条件都不满足时,就走默认顺序流。如果没有默认顺序流,将抛出异常。

图形符号

xml表示

<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" />

1.3.2 并行网关(parallelGateway)

定义:

并行网关模拟多个同时并行执行的流程这种情况。两个特点:

1、具有fork-join行为(发散和汇聚,想起了java中的fork-join线程框架),即从并行网关传出的流程会并行执行,传入并行网关的流程会进入里面等待,知道并行的流程都进入到并行网关后,再一起发散出去。

2、并行网关忽略分支的条件判断。

图形符号

xml表示

<parallelGateway id="myParallelGateway" />

包含网关(inclusiveGateway)

定义:

看作是排他网关和并行网关的组合,包含网关既能进行条件判断,又能并行执行多个分支。

图形符号

xml表示

<inclusiveGateway id="myInclusiveGateway" />

还是事件网关等。

2、顺序流。

定义:顺序流就是事件,活动和网关之间的连线,显示为一条实线 带有箭头,在BPMN图形中每个顺序流都有一个源头和一个 目标引用,包含了 活动,事件或网关的id。

<sequenceFlow id="myFlow" name="MyFlow" sourceRef="sourceId" targetRef="targetId" />

分类:

2.1 条件顺序流

定义:

给顺序流添加表达式条件,当条件判断为true时,该顺序流将会被执行。这意味着如果多个顺序流的条件都为true时,会有多个顺序流并行执行。

图形符号:

XML表示

条件序列流在XML中表现为常规序列流,其中包含conditionExpression子元素。当前conditionalExpression仅可与UEL一起使用。

<sequenceFlow id="flow" sourceRef="theStart" targetRef="theTask"> 
    <conditionExpression xsi:type="tFormalExpression"> 
        <![CDATA[${order.price > 100 && order.price < 250}]]> 
    </conditionExpression>
</sequenceFlow>

2.2 默认顺序流

定义:

所有BPMN 2.0任务和网关都可以具有默认序列流。当且仅当其他条件顺序流都为false时,才选择执行默认顺序流。默认序列流的条件总是被忽略。

图形符号:

默认序列流是开始处带有斜杠标记的常规顺序流。

xml表示:

通过default属性执行默认顺序流。flow2为排他网关的默认顺序流。

<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" default="flow2" />         
      <sequenceFlow id="flow1" sourceRef="exclusiveGw" targetRef="task1">     
          <conditionExpression xsi:type="tFormalExpression">
            ${conditionA}    
          </conditionExpression> 
       </sequenceFlow> 
      <sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="task2"/> 
      <sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="task3"> 
         <conditionExpression xsi:type="tFormalExpression">
            ${conditionB}
         </conditionExpression> 
      </sequenceFlow>
</exclusiveGateway>

3 泳道(Swimlanes):包括池和道两种类型;

4人工产物(包含文字注释、组和数据对象)

三、后记

本文章的目的,帮助大家了解BPMN2.0规范的内容,更好的画业务流程图,当你看到一个BPMN2.0符号时,能认识他、知道它的作用、知道怎样用xml来表示该符号就行了。

好了,BPMN2.0规范就先介绍这么多吧,灵活运用以上符号能解决70%的业务流程场景。如果有需要了解更多bpmn2.0规范的小伙伴,可以在评论区留言,我会适当的更新更多的内容。

参考:

Activiti User Guide

流程结构 | AWS BPMN2 Process参考指南

http://www.mossle.com/docs/jbpm4devguide/html/bpmn2.html

资源参考:

https://blog.csdn.net/qq_30739519/category_6186260.html

工作流选型

Activiti定时任务

工作流引擎之activiti6实时流程图追踪

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值