天天看点

python activiti bpmn_ACTIVITI 研究系列 —— 流程设计 、BPMN文件 和 一些扩展思路

一、安装Activiti 的Eclipse Designer插件

python activiti bpmn_ACTIVITI 研究系列 —— 流程设计 、BPMN文件 和 一些扩展思路

安装好后,就可以创建Activiti 设计图了:

python activiti bpmn_ACTIVITI 研究系列 —— 流程设计 、BPMN文件 和 一些扩展思路

二、设计流程

在你的任意项目中,选择一个位置专门放置设计文件,然后创建Activiti Diagram。

我设计了一个流程如下图:

python activiti bpmn_ACTIVITI 研究系列 —— 流程设计 、BPMN文件 和 一些扩展思路

流程比较简单,我只是用来讲解Activit主要元素和BPMN文件使用,该图的业务简单说明。

(至于设计器右侧的组件面板(Palette)我则不贴图了,读者在eclipse中打开bpmn文件后自然就会看到)

采用了泳道,这样方便区分那些任务是属于那些角色的。任务:可以是UserTask(人工任务)、ScriptTask(脚本任务,自动执行)、ServiceTask...等等。

角色:注意泳道对应的是角色。具体各个任务的执行人,一般在流程实例中根据业务情况来动态分配。

有起始 和 结束节点起始节点只有一个

结束节点可以有多个。

网关。常用的有三种,现在增加了事件网关。排他网关exclusiveGateway:即上图的第一个网关。即有多个分支,按条件选择一个分支(必须有一个符合条件)。

并行网关parallelGateway :即上图的第二和第三个网关,注意要配对出现。即无条件的将流程分为多个分支。

包含网关inclusiveGateway :排他和并行网关的结合体。即流程存在N个分支,流程实例中根据条件选择 1~N个分支来执行。

基于事件网关eventBasedGateway :即到该网关流程会暂停,等待外部事件的通知。一般会在其中一个分支中增加定时器,

用于超时未接收到事件,流程从该定时器分支继续往下执行。

其它具体元素和实际使用,在以后相应的文章中会探讨,本文只是简单说明一下。

三、BPMN文件说明

设计好流程后,这些内容都会被保存到后缀为bpmn的设计文件中,它其实就是一个xml文件。

用文本或者xml编辑器打开该文件,主要看process下面的内容。

由于本流程设计用到了泳道,所以会有一段泳道的代码,但是该段代码不影响流程的业务流转,所以我将其折叠起来。

python activiti bpmn_ACTIVITI 研究系列 —— 流程设计 、BPMN文件 和 一些扩展思路

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技术执行来扩展业务。

网关执行的判断条件是一个表达式,可以通过流程变量(或表单变量)来控制。