工作流Activiti流程图各元素之开始事件和结束事件介绍

我们常见的工作流流程图,通过各元素的拖拽生成,如下图:


工作流Activiti流程图各元素之开始事件和结束事件介绍

要想生成根据业务需求制定的流程图,首先要知道这些构成元素代表的是什么,这篇就来将一下这些元素的作用。通过activiti集成eclipse,会在开发工具的右边显示这些元素:


工作流Activiti流程图各元素之开始事件和结束事件介绍

从一级分类中可以看出,分为开始事件、结束事件、任务、子流程和调用节点、网关、边界事件、捕获和触发事件、顺序流等,下面就来介绍一下里面的子元素:

一、开始事件:


工作流Activiti流程图各元素之开始事件和结束事件介绍

1、StartEvent(空开始事件)

空开始事件技术上意味着没有指定启动流程实例的触发条件。 这就是说引擎不能预计什么时候流程实例会启动。 空开始事件用于,当流程实例要通过API启动的场景, 通过调用startProcessInstanceByXXX方法,子流程都有一个空开始事件。

ProcessInstance processInstance = runtimeService.startProcessInstanceByXXX();

2、TimerStartEvent(定时开始事件)

定时开始事件用来在指定的时间创建流程实例。 它可以同时用于只启动一次的流程 和应该在特定时间间隔启动多次的流程,子流程不能使用定时开始事件,定时开始事件在流程发布后就会开始计算时间。 不需要调用startProcessInstanceByXXX,当包含定时开始事件的新版本流程部署时, 对应的上一个定时器就会被删除。


工作流Activiti流程图各元素之开始事件和结束事件介绍

其中timeDuration是指定定时器之前要等待多长时间;timeDate是使用 ISO 8601 格式指定一个确定的时间,触发事件的时间;timeCycle指定重复执行的间隔, 可以用来定期启动流程实例,或为超时时间发送多个提醒。

3、MessageStartEvent(消息开始事件)

消息开始事件可以用其使用一个命名的消息来启动流程实例, 这样可以帮助我们使用消息名称来选择正确的开始事件。

注意: a、消息开始事件的名称在给定流程定义中不能重复。流程定义不能包含多个名称相同的消息开始事件。 如果两个或以上消息开始事件应用了相同的事件,或两个或以上消息事件引用的消息名称相同,activiti会在发布流程定义时抛出异常。 b、消息开始事件的名称在所有已发布的流程定义中不能重复。 如果一个或多个消息开始事件引用了相同名称的消息,而这个消息开始事件已经部署到不同的流程定义中, activiti就会在发布时抛出一个异常。 c、流程版本:在发布新版本的流程定义时,之前订阅的消息订阅会被取消。 如果新版本中没有消息事件也会这样处理。

流程实例启动,消息开始事件可以使用 下列RuntimeService中的方法来触发:

ProcessInstance startProcessInstanceByMessage(String messageName); ProcessInstance startProcessInstanceByMessage(String messageName, Map<String, Object> processVariables); ProcessInstance startProcessInstanceByMessage(String messageName, String businessKey, Map<String, Object< processVariables);


工作流Activiti流程图各元素之开始事件和结束事件介绍

4、ErrorStartEvent(错误开始事件)

错误开始事件可以用来触发一个事件子流程, 错误开始事件不能用来启动流程实例,错误开始事件都是中断事件。


工作流Activiti流程图各元素之开始事件和结束事件介绍

5、SignalStartEvent(信号开始事件)

信号开始事件,可以用来通过一个已命名的信号(signal)来启动一个流程实例。 信号可以在流程实例内部使用“中间信号抛出事务”触发, 也可以通过API(runtimService.signalEventReceivedXXX 方法)触发。两种情况下, 所有流程实例中拥有相同名称的signalStartEvent都会启动。


工作流Activiti流程图各元素之开始事件和结束事件介绍

二、结束事件:


工作流Activiti流程图各元素之开始事件和结束事件介绍

1、EndEvent(空结束事件)

空结束事件意味着到达事件时不会指定抛出的结果。 这样,引擎会直接结束当前执行的分支,不会做其他事情。


工作流Activiti流程图各元素之开始事件和结束事件介绍

2、ErrorEndEvent(错误结束事件)

当流程执行到错误结束事件, 流程的当前分支就会结束,并抛出一个错误。 这个错误可以被对应的中间边界错误事件捕获。 如果找不到匹配的边界错误事件,就会抛出一个异常。


工作流Activiti流程图各元素之开始事件和结束事件介绍

3、TerminateEndEvent(终止结束事件)

终止结束事件表示为结束事件,具有terminateEventDefinition子元素。terminateAll属性是可选的,默认情况下为false。可以添加可选属性terminateAll。如果为true,则无论在流程定义中是否放置终止结束事件,并且无论是否处于子流程(甚至是嵌套)、(根)流程实例都将终止。


工作流Activiti流程图各元素之开始事件和结束事件介绍

4、CancelEndEvent(取消结束事件)

取消结束事件只能与BPMN事务子流程结合使用。 当到达取消结束事件时,会抛出取消事件,它必须被取消边界事件捕获。 取消边界事件会取消事务,并触发补偿机制。


工作流Activiti流程图各元素之开始事件和结束事件介绍

以上就是5中开始事件和结束事件,有些事件需要结合边界事件(BoundaryEvent)来完成流程定义。

您可能还会对下面的文章感兴趣: