Flowable基础知识点总结

流程部署设计到的表


act_re_deployment(部署对象表)存放流程定义的显示名和部署时间,每部署一次增加一条记录
act_re_procdef(流程定义表)
    存放流程定义的属性信息,
    部署每个新的流程都会在这张表中增加一条记录。当流程定义的key相同的情况下,使用的是版本升级。
act_ge_bytearry(资源文件表)
    存放流程定义相关的部署信息。即流程定义文档的存放处。每部署一次会增加两条记录,一条是
    关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,Folwable会在部署时
    解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。

act_ge_property:主键生成策略表。


流程定义相关知识点

流程定义:
    流程定义类。可以从这里获得资源文件等。
     类似我们定义的java类,提前定义一系列的规则。
流程实例:
    代表流程定义的执行实例。如学生张三请了一天的假,他就必须发出一个流程实例的申请。
    一个流程实例就表示了所有的运行节点,我们可以利用这个对象来了解当前流程实例的进度等信息。
    流程实例就表示一个流程从开始到结束的最大的流程分支,即一个流程中流程实例只有一个。
    流程实例通常也可以叫做执行实例的根节点。
    流程实例和流程定义为一对多的关系。
执行实例:
    ProcessInstance Extends Execution,即ProcessInstance就是Execution。
    启动流程的时候会首先创建流程实例,然后创建执行实例。
    流程运转过程中永远执行的是自己对应的执行实例。
    当所有的执行实例按照规则执行完毕之后,则实例随之结束。
    Flowable用这个对象去描述流程执行的每一个节点。
    流程按照流程定义的规则执行一次的过程,就可以表示执行对象Execution.
    一个流程中,执行对象可以存在多个,但是流程实例只能有一个。
    执行实例的父级或者父级的父级为流程实例。
    执行实例可能会暂停到某一个活动节点,需要我们去通过特定的api去完成,然后执行实例继续往下走。

节点相关知识点

 

开始节点:
     开始节点代表一个规则的开始。
     在一个规则文件中,开始节点只能是一个,不能是多个。如果是多个则部署的时候会报错。
     子流程以及引用流程也是如此。开始节点只能是一个。
     启动流程的时候,从开始节点让流程实例运行。

结束节点:
    结束节点代表一个规则的结束。
    在一个规则文件中,结束节点可以是多个。
    如果实例运转到结束节点的时候,则表示当前的执行实例要结束了,执行实例结束则流程实例也随之结束。

节点说明:
     Flowable中很多类型的事件、活动、网关。
     事件有开始事件、结束节点之类的
     活动类型比较多,比如人工任务节点,服务任务节点,脚本任务,用户任务等。
     活动节点大概分为两类:一种是等待节点,也就是说实例走到这个类型的节点之后,会停留在这个节点,需要
     我们手工去完成当前的节点,这样实例才能继续往下运转。一种是非等待节点,也就是说实例走到这个节点的时候,会直接完成。
     网关可以根据一些条件规则决定实例往哪个地方运转。

接受任务节点(receivetask)使用-流程定义:
     接受任务是一个简单的任务,他会等待对应消息的到达。当前,官方只是实现了这个任务的java定义。当流程达到接收任务,流程状态会保存到数据库中。
     在任务创建后,意味着流程会进入等待状态,知道流程引擎接收了一个特定的消息,这会触发流程穿过接收任务继续执行。
     接收任务不会向act_ru_task表中插入数据。

任务说明:
     在flowable任务中,主要分为两大类查询任务(个人任务和组任务)
     确切指定了办理者的任务,这个任务将成为指定者的私有任务,即个人任务
     无法指定具体某一个人来办理的任务,即可以把任务分配给几个人或者一到多个小组,让这个范围内的用户可以选择性(如有空余时间时)来办理这类任务,即组任务。

设置个人任务处理人的三种方式:
     在bpmn中直接写assignee="张胖子"
     在bpmn中写assignee="#{userId}",变量的值要是String类型的,使用流程变脸指定办理人
     使用TaskListener接口,要使类实现该接口,在类中定义:delegateTask.setAssignee("张胖子");//指定个人任务的办理人

设置组任务处理人的方式:
     在bpmn文件中直接写candidateUsers="张胖子,高胖子"。
     在bpmn中写candidateUsers="#{userIds}",变量的值要是String的
         使用流程变量指定办理人:
             Map<String,Object> vars=new HashMap<String, Object>();
             vars.put("userIds","张胖子,高胖子");
     使用TaskListener接口,要使类实现该接口,在类中定义:delegateTask.addCandidateUser("张胖子");

组任务说明:
    在类中使用delegateTask.addCandidateUser(userId)的方式分配组任务的办理人,此时张胖子和高胖子是下一任务的办理人。
    通过taskService.claim(taskId, userId)将组任务分配给个人任务,也叫认领任务。
    注意:认领任务的时候,可以是组任务成员中的人,也可以不是组任务成员中的人,此时通过Type的类型为participant来指定任务的办理人。
    addCandidateUser()向组任务中添加成员,deleteCandidateUser()删除组任务中的成员。
    在开发中,可以将每一个任务的办理人规定好,例如张三的领导是李四和王五,这样张三提交任务,由李四或者王五去查询组任务,可以看到对应张三的申请。李四或者王五再由任务认领的方式,由某个人去完成这个任务。

    组任务分配给个人任务(认领任务):taskService.claim(taskId, userId)。
    个人任务分配给组任务:taskService.setAssignee(taskId, null)。

个人任务和组任务存放办理人对应的表:
    act_ru_identitylink表存放任务的办理人,包括个人任务和组任务,表示正在执行的任务
    act_hi_identitylink表存放任务的办理人,包括个人任务和组任务,表示历史任务
    如果是个人任务TYPE的类型表示participant(参与者)
    如果是组任务TYPE类型表示candidate(候选者)和participant(参与者)

用户行为类:UserTaskActivityBehavior,任务处理方法。handleAssignments()方法
服务任务使用:
    服务任务是不等待节点。
    执行实例走到服务任务节点之后会继续往下流转。
脚本任务:
    脚本任务是不等待节点,经过节点不报错实例继续向下走。
    脚本类型有javascript、groovy、juel
网关:
   网关分为三种:排他网关、并行网关、兼容网关。
   网关主要是为了满足一些特殊的业务,比如排他网关,可以让流程实例出线分支,当有多个条件满足的时候只会走一个执行树。
   并行网关有分流和聚合两个功能。
    兼容网关可以成为并行网关使用,也可以当做排他网关使用。

 变量相关的操作

 流程变量相关概念
      流程变量在整个工作流中扮演很重要的作用。例如:请假流程中的请假天数、请假原因等一些参数都为流程变量的泛微。
      流程变量的作用域范围是只对应一个流程实例。各个流程实例的流程变脸是不相互影响的。
      流程实例结束完成以后流程变量还保存在数据库中。
 设置全局变量说明
      流程变量的作用域是流程实例,所以只要设置就可以,不用管在那个阶段设置。
      基本类型设置流程变量,在taskservice中使用任务ID,定义流程变量的名称,设置流程变量的值。
      Javabean类型设置流程变量,需要这个javabean实现Serializable接口。
      设置流程变量的时候,向act_ru_variable和act_hi_variable表中插入数据。
 获取变量说明
      流程变量的获取针对流程实例(即1个流程),每个流程实例获取的流程变量是不同的。
      使用基本类型获取流程变量,在taskservice中使用任务ID,流程变量的名称,获取流程变量的值。
      Javabean类型设置获取流程变量,除了需要这个javabean实现serializable接口外,还要求流程变量对象的属性不能发生变化,否则抛出异常。
          解决方案:在javabean对象中添加,private static final long serialVersionUID;
      runtimeService对象可以设置流程变量和获取流程变量。
      taskService对象可以设置流程变量和获取流程变量
      流程实例启动的时候可以设置流程变量。
      任务办理完成的时候可以设置流程变量。
      流程变量可以通过名称/值的形式设置单个流程变量。
      流程变量可以通过Map集合,同事设置多个流程变量。
      Map集合的key表示流程变量的名称,value表示流程变量的值。

  变量总结:
      在流程执行或者任务执行的过程中,用于设置和获取变量,使用量程变量在流程传递的过程中传递业务参数。
      act_ru_variable:正在执行的流程变量表。
      act_hi_variable:流程变量历史表。
      sertVariable:设置流程变量的时候,流程变量名称相同的时候,后一次的值替换前一次的值,而且可以看到task_id的字段不会存放任务ID的值。
      setVariableLocal:设置流程变量的时候,针对当前活动的节点设置流程变量,若果一个流程中存在两个活动节点,针对每个活动节点都设置的流程变量,
                      即使流程变量的名称相同,后一次的版本的值也不会替换前一次版本的值,他会使用不同的任务ID作为标识,存放两个流程变量值,
                      而且可以看到task_id的字段会存放任务ID的值。
      sertVariable和setVariableLocal的区别:使用setVariableLocal说明流程变量绑定了当前的任务,当流程继续执行时,下个任务获取不到这个流程变量(因为
                      正在执行的流程变量中没有这个数据),所以查询真在执行的任务时不能查询到我们需要的数据,此时需要查询历史流程变量。

      临时变量不会持久化到数据库中。使用场景例如:任务节点后连线中变量参与计算 但是不用持久化到数据库中的数据。

    
 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值