目录
一、安装Activiti 的Eclipse Designer插件
【原文地址:http://craft6.cn/detail/activiti_research_designer_element_bpmn.do】
一、安装Activiti 的Eclipse Designer插件
Activiti基于Eclipse的设计器插件地址:https://www.activiti.org/designer/update/
安装好后,就可以创建Activiti 设计图了:
二、设计流程
在你的任意项目中,选择一个位置专门放置设计文件,然后创建Activiti Diagram。我设计了一个流程如下图:
流程比较简单,我只是用来讲解Activit主要元素和BPMN文件使用,该图的业务简单说明。
(至于设计器右侧的组件面板(Palette)我则不贴图了,读者在eclipse中打开bpmn文件后自然就会看到)
- 采用了泳道,这样方便区分那些任务是属于那些角色的。
- 任务:可以是UserTask(人工任务)、ScriptTask(脚本任务,自动执行)、ServiceTask...等等。
- 角色:注意泳道对应的是角色。具体各个任务的执行人,一般在流程实例中根据业务情况来动态分配。
- 有起始和结束节点
- 起始节点只有一个。
- 结束节点可以有多个。
- 网关。常用的有三种,现在增加了事件网关。
- 排他网关exclusiveGateway:即上图的第一个网关。即有多个分支,按条件选择一个分支(必须有一个符合条件)。
- 并行网关parallelGateway :即上图的第二和第三个网关,注意要配对出现。即无条件的将流程分为多个分支。
- 包含网关inclusiveGateway :排他和并行网关的结合体。即流程存在N个分支,流程实例中根据条件选择 1~N个分支来执行。
- 基于事件网关eventBasedGateway :即到该网关流程会暂停,等待外部事件的通知。一般会在其中一个分支中增加定时器,用于超时未接收到事件,流程从该定时器分支继续往下执行。
其它具体元素和实际使用,在以后相应的文章中会探讨,本文只是简单说明一下。
三、BPMN文件说明
设计好流程后,这些内容都会被保存到后缀为bpmn的设计文件中,它其实就是一个xml文件。
用文本或者xml编辑器打开该文件,主要看process下面的内容。
由于本流程设计用到了泳道,所以会有一段泳道的代码,但是该段代码不影响流程的业务流转,所以我将其折叠起来。
- process 的 id:即流程定义的 ID,通过这个来查询、发布流程等。
- startEvent 开始节点,关键是设置一个Listener,这样我们就可以在流程启动的时候插入自己的业务了。比如可以在设置一段脚本,在StartEventListener中执行该脚本(Groovy技术)
- userTask 有三个阶段事件:create、assignment 和 complete。分别表示在节点任务创建、分配给执行人 和 执行完毕后所调用的Listener。
- 可以采用同样的方式允许在系统管理后台中,针对不同的阶段事件设置相应的脚本,然后在Listener执行。系统也可以有一些默认的业务,比如记录日志、发送消息等,在不同的Listener中触发执行。这三个Listener都是继承Activiti的AbstractTaskListener。网关。如图中的sequenceFlow sourceRef 表示 这个分支是来自哪个网关的。=500000]]> 这段代码最为重要,表示根据参数值判断选择哪个分支执行。total表示是流程变量,在该网关前面的节点设置,一般是从表单中获取,比如对应本业务就是录入一个认购资料的表单,在表单中有总价,将这个总价抽取出来作为流程变量,然后根据该变量控制分支流转。
- endEvent 结束节点,对应的是EndEventListener,该Listener自行开发,继承Activiti的AbstractExecutionListener。
四、总结
- 整个流程的设计在bpmn文件中可以达到完全的体现。甚至可以将所有的设置内容全部持久化到该设计文件中,这样设计、测试和运营的不同阶段便容易进行分离。
- 通过在activiti提供的不同事件的Listener侵入方式,可以很方便的扩展我们自己的业务
- 可以通过在Listener中执行配置的脚本(不同流程、节点配置业务相关脚本),
- 使用Groovy技术执行来扩展业务。
- 网关执行的判断条件是一个表达式,可以通过流程变量(或表单变量)来控制。