• Activiti工作流与BPMN2.0规范


    本章内容根据BPMN2.0规范的分类划分为以下部分:

    1.启动与结束事件(event)
    2.顺序流(Sequence Flow)
    3.任务(Task)
    4.网关(Gateway)
    5.子流程(Subprocess)
    6.边界事件(Boundary Event)
    7.中间事件(Intermediate Event)
    8.监听器(Listener)

    一 启动事件与结束事件

    启动事件与结束事件是很重要的一部分,分别负责流程的开始与结束
    图例:

    结束事件
    启动事件
    1.1 启动事件

      启动事件又分为:
      空启动事件
      定时启动事件
      异常启动事件
      消息启动事件

    1、空启动事件

    <startEvent id="startevent" name="开始"></startEvent>

    以上XML表示一个空启动事件,由于startEvent标签内没有任何元素定义,因此表示一个空启动事件

    属性名称属性说明
    avtiviti:formKey Activiti扩展的formKey属性,可以用来指定启动事件关联的表单文件
    activiti:initiator activiti扩展的initiator事件,可以用来记录启动流程人的ID,启动流程之后此属性指定的变量就会自动设置当前人的名称

     2.定时启动事件

    定时启动事件可以用于一次性定时启动,也可以用于特定时间定时启动

    定时启动事件

    <startEvent id="timerstartevent1" name="Timer start">
    <timerEventDefinition></timerEventDefinition>
    </startEvent>

    以上XML就表示一个空定时启动事件

    属性名称属性说明
    timeDate 一次性定时启动,具体到一个日期
    timeDuration 设置多长时间之后启动流程
    timeCycle 周期性启动任务,用来设定循环的时间间隔,表示多长时间执行一次循环

      3.异常启动事件
    异常启动事件可以出发一个异常子流程,但不能通过API方式启动,总是在另外一个子流程抛出异常结束事件的时候被触发
    异常启动事件"捕获型",而异常结束事件是抛出型的

    异常启动事件

    <endEvent id="errorendevent1" name="ErrorEnd">
    <errorEventDefinition></errorEventDefinition>
    </endEvent>

    以上XML就表示一个空定时启动事件

     4.消息启动事件
    消息启动事件可以通过一个消息名称触发,从而启动一个流程实例,还可以结合消息抛出事件一起使用

    消息启动事件

    1.2 结束事件

    结束事件又分为:
    空结束事件
    异常结束事件
    终止结束事件
    取消结束事件

    1.空结束事件
    结束事件是抛出型的。空结束事件不处理抛出结果,空结束事件一般用于正常结束流程

    空结束事件

    2.异常结束事件
    异常结束事件时有抛出结果的,它定义了需要抛出的错误代码,如果找到了异常开始事件定义的异常代码,则会触发异常开始事件,否则按照空结束事件处理

    异常结束事件

    3.终止结束事件
    他可以终止一个流程实例的执行

    终止结束事件

    4.取消结束事件
    取消结束事件可以取消一个事务子流程的执行,同时也能在子流程中使用,
    当子流程在执行过程中出现异常时,可以设置一个取消结束事件

    二 任务

    任务时流程中重要的组成部分,可分为:
    用户任务
    脚本任务
    WebServices任务
    业务规则任务
    邮件任务
    Mule任务
    Camle任务
    手动任务
    JavaService任务
    Shell任务

    2.1 用户任务

    用户任务

    <process id="myProcess" name="My process" isExecutable="true">
    <userTask id="usertask1" name="User Task"></userTask>
    </process>

    以上XML定义了一个用户任务

    属性名称属性说明
    activiti:assignee 用来指定用户任务的处理人
    activiti:cadidateUsers 用来指定用户任务的候选人,多个用逗号隔开
    activiti:cadidateGroups 用来指定多个候选组,多个用逗号隔开
    activiti:dueDate 设置任务的到期日,通常用变量代替而不是设定一个具体的日期
    activiti:priority 设定任务的优先级,取值区间[0,100]

    2.2 脚本任务
    脚本任务可以运行引擎依赖的语言之外的脚本语言

    脚本任务
    属性名称属性说明
    scriptFormat 用来指定符合规范的脚本类型
    activiti:resultvariable 把脚本处理的结果保存到一个变量中
    activiti:priority 设定任务的优先级,取值区间[0,100]

    2.3 Java Service 任务
    JavaService 任务允许指定一个实现了指定接口的java类,或者执行一个表达式,可以把一个结果保存到一个变量中

    JavaServices任务
    属性名称属性说明
    activiti:class 实现了接口JavaDelegate的Java类
    activit:expression 一个表达式
    activiti:delegateExpression 实现了指定接口的表达式
    activiti:resultvariable 把脚本处理的结果保存到一个变量中

    2.4 WebServices 任务
    通过WebServices任务可以调用外部的WebServices资源,完成调用只需要一些必须的配置就行

    2.5 业务规则任务
    业务规则任务可以根据流程变量的值预设的业务规则,就是把业务数据交由规则引擎处理,规则引擎根据不同的业务规则得到最终的结果在返回给调用者

    业务规则任务
    属性名称属性说明
    activiti:relues 定义规则的名称,多个用逗号隔开
    activit:ruleVariablesInput 业务规则需要的 数据源使用${fooVar方式定义,多个用逗号隔开}
    activit:ruleVariablesName 规则执行结果变量,变量的值为ruleVariablesInput定义的变量集合
    activiti:execlude 用来设置是否排除某些规则

    2.6 邮件任务
    邮件任务可以通过Activiti发送邮件,其中邮件的信息通过变量的方式传递

    邮件任务
    属性名称是否必须描述
    mailServerHost 邮件任务的主机名,默认为host
    mailServerPost 是,如果不是默认的端口 默认为25,如果是使用SSL则为465
    mailServerDefaultFrom 发件人email,如果不设置默认为:activiti@activiti.org
    mailServerUsername 否,是否需要认证设置 邮件服务认证账号
    mailServerPassword 否,是否需要认证设置 邮件服务认证密码
    属性名称属性说明
    to 必填,收件人,多个收件人用逗号隔开
    from 邮件发送人地址,如果不设置则使用mailServerDefaultFrom属性指定的发件人
    subject 发件人email如果不设置,默认为activiti@activiti.org
    cc 抄送人列表
    bcc 密送人列表
    charset 邮件内容字符集,建议使用UTF-8
    text 纯文本内容的邮件内容
    html html格式的邮件内容

    三 网关

    网关用于控制流程的走向,可分为:
    排他网关
    并行网关
    包容网关
    事件网关
    3.1 排他网关
    排他网关用来对流程中的决定进行建模,流程执行到该网关时,按照输出流的顺序逐个计算,当条件计算结果为true时,继续执行,如果多个线路的计算结果都为true时,那么只会执行第一个值为true的网关

    排他 网关

    3.2 并行网关
    并行网关用来对并发的任务进行流程建模,并行网关的任务取决于输入,输出顺序流
    拆分:并行执行所有的输出输入顺序流,并且为每一条顺序流创建一个并行执行线路
    合并:所有从并行网关拆分并执行完成的线路均在此等候,直到所有的线路都执行完成才继续向下执行

    并行网关

    3.3包容网关
    包容网关融合了排他网关和并行网关的特性,包容网关既可以同时执行多条线路。也允许在网关上设置条件,也分为拆分与合并

    包容网关

    3.4 事件网关
    事件网关是专门为中间捕获事件设置的,它允许多个输出流指向多个不同的中间捕获事件。当流程执行到事件网关后流程处于等待的状态,因为中间等待事件需要依赖中间抛出事件触发

    事件网关

    四 子流程

       把一切需要处理的任务归结到一起作为一个大流程的一部分,因为子流程嵌入在主流程中,所有也叫"嵌入式子流程"
      子流程限制:只能包含一个空启动事件,至少有一个结束事件,在子流程中不能把输出流设置到子流程之外的活动上

    4.1 调用活动
    调用活动解决的问题是流程的通用性,和子流程一样只不过表现的方式不同而已

    调用活动
    属性名称属性说明
    calledElement 流程的ID对应的流程应该独立存在
    activiti:in 调用外部流程时传入的变量,被调用活动需要获取主流的信息
    activiti:out 调用活动完成后的结果

    五 监听器

    在Activiti 中开发人员可以通过配置监听器的方式监听各种动作,例如流程 的启动,结束,创建,任务的完成
    监听器分为两类:执行监听器任务监听器

    执行监听器可以捕获的事件如下:
    流程实例的启动,结束
    输出流的捕获
    活动的启动,结束
    路由开始,结束
    中间事件开始,结束
    触发开始事件,触发结束事件

    import org.activiti.engine.delegate.DelegateExecution;
    import org.activiti.engine.delegate.ExecutionListener;
    public class ExecutionListenerForFlow implements ExecutionListener{
       @Override
       public void notify(DelegateExecution delegate) throws Exception {
      }
    }

    任务监听器相对于执行监听器的使用范围要小的多,因为它只适用于用户任务,用来监听3种事件
    create:在任务被创建且所有的任务属性设置完成后才触发
    assignment:在任务被分配给某个办理人之后触发
    complete:在配置了监听器的上一个任务完成时触发

    import org.activiti.engine.delegate.DelegateTask;
    import org.activiti.engine.delegate.TaskListener;
    public class ExecutionListenerForFlow implements TaskListener{
       @Override
       public void notify(DelegateTask arg0) {
       // TODO Auto-generated method stub
      }
    }

  • 相关阅读:
    Django rest framework集成微博第三方登录
    Python web项目Django部署在Ubuntu18.04腾讯云主机上
    Mac中安装JDK1.8和JDK11双版本并任意切换
    Nginx完美解决前后端分离端口号不同导致的跨域问题
    Mac系统安装Tomcat服务器
    Python将数据渲染到docx文档指定位置
    IO多路复用select/poll/epoll详解以及在Python中的应用
    Tornado框架实现异步爬虫
    广州商学院Python正方教务系统爬虫(获取个人信息成绩课表修改密码)
    Python3使用tkinter编写GUI程序
  • 原文地址:https://www.cnblogs.com/zhaosq/p/10081329.html
Copyright © 2020-2023  润新知