专业的编程技术博客社区

网站首页 > 博客文章 正文

「低代码平台」springboot+Activiti7多实例(会签)流程实现(一)

baijin 2024-10-18 04:08:18 博客文章 13 ℃ 0 评论

产品说明

工作流低代码非常适合学习、项目研发、私活项目开发等工作场景,实现大部分场景可以无需编码,通过拖拽表单+流程设计实现流程审批功能,大大减少了研发的工作量。

本次升级文档及源码地址:

https://www.yuque.com/qingfengaibiancheng/chq3gg/thnfxb

一、什么是多实例(会签)

在流程业务管理中,任务通常是由一个人去处理的,而多个人同时处理一个任务,称之为会签任务。

Activiti实现会签是基于多实例任务,将节点设置成多实例,主要通过在UserTask节点的属性上配置。

如果想让某些特定的流程活动的行为执行多次,则可以将活动设置为多实例,让其按照配 置来执行相应的次数。User Task 会创建活动的实例, 流程是否通过 User Task ,由用户决定,这不属于活动的行为。活动的多实例可以让一个流程活动(甚至是子流程〉按顺序或者同时执行,在执行的过程中,会为活动产生多个实例,因此称该流程活动为多实例的流程活动。大部分的流程活动均可以被设置为循环执行,这些活动包 括大部分的流程任务、嵌入式子流程 和调用式子流程 。为流程活动的元素添

multilnstanceLoopCharacteristics 子元素,将该流程活动配置为一个多实例的活动,如以下的配

置片断:

<userTask id=” myTask "> 
    <multiinstanceLoopCharacteristics isSequent al false I true ”>
    </multiinstanceLoopCharacteristics> 
</userTask>

以上配置片断中的 multilnstanceLoopCharacteristics 元素的 isSequential 属性,用于配置这 个流程活动在执行时,是按顺序执行还是同时执行,为 true 表示按顺序执行, false 则同时执 丁。


多实例活动像是循环体,可以为它提供集合或者设定循环次数,让它循环,就像使用 Java

里面的循环语句一样。

<process id=” process l ” name=” processl ” >
  <startEvent id=” starteventl " name=”Start ” ></startEvent> 
  <userTask id=” usertask2 " name=” Task 1 ”>
  <multiinstanceLoopCharacteristicssSequential true
  <loopCardinality>2</loopCardinality> 
  </multiinstanceLoopCharacteristics>
  </userTask> 
  <endEvent id="endeventl" name="End"></ endEvent> 
  <seque ceFlow id="flowl" name= "" sourceRef=”starteventl” 
  targetRef usertask2 ></ seque ceFlow>
  <sequenceFlow id=”flow2 ” name=”” sourceRef =” usertask2 ” 
  targetRef=”usertask3 ” ></sequenceFlow> 
  <sequenceFlow =” flow3 name =” sourceRef usertask3
  targetRef=” endeventl” ></sequenceFlow> 
</process>

中定义了 个多实例的用户任务,该用户任务的全部实例将会按顺序 执行( isSequential=true ),设置了循环次数为 代2。


二、多实例(会签)参数说明

会签的种类

  • 按数量通过:达到一定数量的通过表决后,会签通过。
  • 按比例通过:达到一定比例的通过表决后,会签通过。
  • 一票否决:只要有一个表决是否定的,会签否决。
  • 一票通过:只要有一个表决通过的,会签通过。

1、多实例包含的默认变量

  • nrOfInstances:创建的实例总数
  • nrOfActiveInstances当前活动的实例数,针对顺序类型的多实例,该变量值等于1
  • nrOfCompletedInstances:已执行实例数
  • loopCounter:表示多实例流程循环的下标

2、多实例类型

顺序(sequential ):执行顺序,必选项。true:多实例顺序执行。false:多实例并行。

并行(parallel):多个实例会同时并行发放给处理人

loop cardinality:循环基数(实例数量),可选项。可填整数,表示会签的人数。

Collection:集合,可选项。会签人数的集合list,与loop cardinality二选一。

Element variable:元素变量。选择Collection时必选,为collection集合每次遍历的元素。

Completion condition:完成条件,可选项。

3、多实例基数

定义多实例生成的实例数。当结合采集方式生成多实例时,该基数只能小于或等于采集集合的size,否则执行过程中将发生系统错误 NoSuchElementException;当基数小于采集集合的size时,则按照集合中元素的顺序生成等于基数指定数量的实例。如果不配合使用采集方式,也可以直接指定基数,则系统会同时生成指定数量的相同实例。

4、多实例采集

用于指定一个List,自动生成等于List size数量的实例。可以将该List设置为处理人员列表,然后设置元素变量名,并将分配—固定值—处理人/代理人设置为元素变量名,则最后会为每一个集合中的人员生成一个已指派实例。

5、多实例元素变量

表示多实例采集中元素对应的变量,该变量保存着集合中元素的最新值,可以使用表达式获取。

6、多实例完成条件

是一个表达式,如果返回值为true则该多实例自动结束。例如 ${nrOfCompletedInstances/nrOfInstances >= 0.6 } 只要所有流程实例完成了60%即该多实例任务结束。

${nrOfInstances == nrOfCompletedInstances} 表示所有人员审批完成后会签结束。

${ nrOfCompletedInstances == 1}表示一个人完成审批,该会签就结束。

Activiti会签有个特性,比如设置一个人完成后会签结束,那么其他人的代办任务都会消失。

7、分配

在使用多实例的情况下,当将分配—固定值—处理人/代理人/候选人设置为多实例元素变量名时,则生成的实例会对应自动指派给列表中配置的处理人。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表