2.3.3 创建流程定义文件
我们即将构建的是一个简单的请假流程,在Flowable术语中,将其称为流程定义,可以使用流程定义启动多个流程实例。流程定义被视为流程执行的蓝图,在这个实例中,定义了请假涉及的各个步骤,一个流程实例对应员工的一个请假申请。
下面,我们将要使用的请假流程做如图2.13所示的定义。为了清晰起见,对图2.13中的几个要点做以下说明。
(1)启动流程需要提供一些信息,如申请人名字、请假时长及说明等。
(2)左侧的圆圈是启动事件,为一个流程实例的起点。
图2.13 请假流程
(3)第一个矩形是用户任务(User Task),是流程中用户必须手动操作的步骤。在这个实例里,经理需要批准或拒绝申请。
(4)根据经理的决定,独占网关(Exclusive Gateway)(带“X”符号的菱形)会将流程实例路由至批准或拒绝路径。
(5)如果申请获得批准,则需要先将申请注册到某个外部系统,接着继续执行另一个用户任务,向申请人通知经理的决定。
(6)如果申请被拒绝,将向申请人发送一封电子邮件作为通知。
注意,一般来说,这样的流程定义使用可视化建模工具建立,如Flowable Designer(Eclipse插件)或Flowable Web Modeler(Web应用)。IDEA没有官方提供的可视化插件,可选插件为Flowable BPMN visualizer。
将下面的XML文件保存在src/main/resources文件夹下名为holiday-request.bpmn20.xml的文件中。为了突出重点内容,已省略XML文件定义头部内容:
每一个步骤(在BPMN 2.0术语中称为活动)都有一个ID属性,是在XML文件中唯一的标识符。所有活动可以设置一个可选名字,从而增加流程图的可读性。
这些活动由顺序流(Sequence Flow)连接,在流程图中表示为一个有向箭头。在执行流程实例时,执行将按照顺序流从启动事件流向下一个活动。
离开独占网关的顺序流很特殊:都有一个以表达式(Expression)形式定义的条件(Condition)。当流程实例的执行到达这个网关时,将解析条件,采用第一个解析为true的条件。这就是独占的含义——只选择一个。
这里用作条件的表达式为“${approved}”,这是${approved==true}的简写。变量approved被称为流程变量(Process Variable)。
现在我们已经有了流程BPMN 2.0 XML文件,接下来需要将它部署(Deploy)到Flowable引擎中。