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帮助我们规范的画流程图。

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实时流程图追踪

当离开 BPMN 2.0活动时,默认行为是计算其每个出口顺序流上的条件。在流程执行过程中访问一个元素之后,将继续执行素有的序列流,默认是并行的。只有当没有其他顺序流可以选择时,才会选择默认顺序流作为活动的出口顺序流。流程会忽略默认顺序流上的条件。下面的例子,通过典型的JavaBean的方式,使用getter引用流程变量的数据。时,选择该出口顺序流。都计算为false时,才会选择默认顺序流作为网关的出口顺序流。子元素的普通顺序流。定义,默认为唯一支持的表达式类型。活动的默认顺序流由该活动的。 Activiti 是由 jBPM (BPM,Business Process Management 即业务流程管理) 的创建者 Tom Baeyens 离开 JBoss 之后建立的项目,构建在开发 jBPM 版本 1 到 4 时积累的多年经验的基础之上,旨在创建下一代的 BPM 解 决方案。 Activiti 作为一个开源的工作流引擎,它实现了 BPMN 2.0 规范 ,可以发布设计好的流程定义,并通过api进行流程调 度。 上世纪九十年代以后,随着WfMC联盟的成立,BPM市场群雄逐鹿如火如荼,工作流技术得到了突飞猛进的发展,其中IBM、Oracle等大型软件厂商在工作流领域各扯大旗割据一方。2011年 BPMN 2.0新 规范 的发布为各工作流产品互容互通提供了统一的标准,结束了各工作流厂商各自为政相互抵斥的局面。BPM基本内容是管理既定工作的流程,通过服务编排,统一调控各个业务流程,以确保工作在正确的时间被正确的人执行,达到优化整体业务过程的目的。BPM概念的贯彻执行,需要有标准化的流程定义语言来支撑,使用统一的语言遵循一致的标准描述具体业务过程,这些流程定义描述由专有引擎去驱动执行。这个引擎就是工作流引擎,它作为B 是一套业务流程模型与符号建模标准精准的执行语义来描述元素的操作以XML为载体,以符号可视化业务 BPMN 2.0-流对象活动( Activiti es)【UserTask、Service、Task…】事件(Event)【StartEvent、EndEvent…】网关(Gateways)【ExclusiveGateway…】 BPMN 2.0-事件事件分类方式位置分类特殊分类事件定义分类事件分类方式-位置分类开始事件中间事件/边界事件结束事件事件分类方式-按照特性分类捕获事件(Catching)抛出事件(Throwing)事件分类方式-按照定义分类定时事件错误事件信号事件消息事件 BPMN 2.0-定时事件定时 1.1 一般 对象管理组(OMG)已开发了标准的业务流程模型和表示法( BPMN )。 BPMN 的主要目标是提供一种易于理解的符 号,从创建流程初始草稿的业务分析人员到负责实施将执行那些流程的技术的技术开发人员,最后是所有业务用 户,给将要管理和监视这些流程的业务人员。因此, BPMN 为业务流程设计和流程实施之间的差距创建了标准化的 另一个目标(但同样重要)是确保可以使用面向业务的符号来可视化设计用于执行业务流程的XML语言,例如 WSBPEL(Web服务业务流程执行语言) 。 该国际标准代表了业务建模社区中最佳 实践 的融合,以定义协作图,流程图和编排图的符号和语义。面对许多不 同的建模表示法和观点, BPMN 的目的是标准化业务流程模型和表示法。这样, BPMN 将提供一种将流程信息传达给 其他业务用户,流程实施者,客户和供应商的简单方法。 OMG的成员带来了许多现有符号的专业知识和经验,并试图将这些不同符号的最佳 思想 整合为一个标准符号。审查 过的其他符号或方法的示例是UML活动图, UML EDOC业务流程, IDEF, ebXML BPSS,活动决策流程(ADF)图, RosettaNet, LOVeM和事件过程链(EPC) 。 BPMN 2.0相对于 BPMN 1.0最大的区别就是定义、 规范 了流程引擎的执行语义和格式,利用标准的图元描述真实的业务发生过程,保证相同的流程在不同的流程引擎中得到一致的执行结果。在2.0的这套标准中,主要对流程执行定义了三类基本要素,分别为 Activiti es(活动)、Gateways(网关)、Events(事件) BPMN 与Activity BPMN 2.0(Business Process Model and Notation) 是一套业务流程模型与符号建模标准   精准的执行语义来描述元素的操作 3.1什么是 BPMN 业务流程建模与标注(Business Process Model and Notation, BPMN ) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram) Eclispse画出流程,有两个文件 bpmn 文件和png文件,其中 bpmn 文件又可以叫做流程定义文件,它需要遵循 BPMN 语言 规范 .png:就是一个单纯的图片,没有... 简单介绍一下 Activiti : Activiti 一套完整的方便的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。开发人员可以通过插件直接绘画出业务。 开发工具: IDEA 画流程图插件:actiBPM(在IDEA插件管理中安装就可以了) BPMN ... 1、将补丁包复制到eclipse安装目录的plugins目录下。 2、打开eclipse菜单:eclipse>help>Install New Software >add Name: Activiti BPMN 2.0 designer Location: 点击Archive按钮改为选择本地下载下来 activiti -designer-5.18.0.zip离线包进行安装即可。 最近在 eclipse上使用 bpmn 画工作流程图时 需要安装 bpmn 但是根据之前的例子在安装按照如下安装 *Name:* Activiti BPMN 2.0 designer *Location:*http:// activiti .org/designer/update/ 出错,有人说是 是这个网址已经不存在了。 用其他的联网安装确实速度有些让人吃惊,毕竟是连的外面的网。 只好使用离线安装。 附带三个jar包:org.eclipse.emf.transaction.jar,org.eclipse.emf.validation.jar,org.eclipse.emf.workspace.jar。解压后,将jars文件夹里的3个jar包复制到eclipse安装目录的plugins文件夹下,然后 activiti -designer-5.14.1.zip 用离线安装的方法操作即可。 业务流程模型注解(Business Process Modeling Notation - BPMN )是业务流程模型的一种标准图形注解。这个标准 是由对象管理组(Object Management Group -OMG)维护的。包含以下部分:流对象:事件、活动、网关连接对象:序列流、消息流、关联泳道:池、道人工制品:数据对象、组、注释。