多实例任务 会签

什么是会签?

举个例子:比如我们有一个任务 可能需要多人审批,审批通过的条件可能比较多样,比如五个人审批。3个人审批过了就算过了,再或者有一个人权限比较高,拥有一票否决权。 即是其余所有人都过了,他点了个否定 就算不过了,这种就是会签。

我们从上面可以清楚看到,这个流程有两个任务节点,分别是多实例任务节点,和任务2. 任务2就是普通的userTask,多实例任务1 其实也是userTask,
只不过是参数设置不同罢了,下面我们上流程的xml定义文件。 <?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
<process id="multiinstance" name="MultiInstance" isExecutable="true">
<documentation>测试多实例模型</documentation>
<startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
<userTask id="sid-AFB0AD6E-5B65-457F-8E99-F3B8104CBA95" name="多实例任务1" flowable:assignee="${assignee}" flowable:formFieldValidation="true">
<extensionElements>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
<multiInstanceLoopCharacteristics isSequential="false" flowable:collection="assigneeList" flowable:elementVariable="assignee">
<loopCardinality>5</loopCardinality>
<completionCondition>${nrOfCompletedInstances/nrOfInstances &gt;= 0.50}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
<sequenceFlow id="sid-78DB6DB5-22CF-406D-9B4A-B4F14A7E062B" sourceRef="startEvent1" targetRef="sid-AFB0AD6E-5B65-457F-8E99-F3B8104CBA95"></sequenceFlow>
<userTask id="sid-F1BBCD6F-3153-4139-9101-D3C8C2F6151C" name="任务2" flowable:formFieldValidation="true"></userTask>
<sequenceFlow id="sid-B452CC02-56EA-46D2-8485-FB5B788200C1" sourceRef="sid-AFB0AD6E-5B65-457F-8E99-F3B8104CBA95" targetRef="sid-F1BBCD6F-3153-4139-9101-D3C8C2F6151C"></sequenceFlow>
<endEvent id="sid-15CEF7DC-E073-484D-9B36-4EB3DA9A059F"></endEvent>
<sequenceFlow id="sid-69D6B9D5-A369-4708-B74B-2DECD1D0F308" sourceRef="sid-F1BBCD6F-3153-4139-9101-D3C8C2F6151C" targetRef="sid-15CEF7DC-E073-484D-9B36-4EB3DA9A059F"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_multiinstance">
<bpmndi:BPMNPlane bpmnElement="multiinstance" id="BPMNPlane_multiinstance">
<bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
<omgdc:Bounds height="30.0" width="30.0" x="90.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-AFB0AD6E-5B65-457F-8E99-F3B8104CBA95" id="BPMNShape_sid-AFB0AD6E-5B65-457F-8E99-F3B8104CBA95">
<omgdc:Bounds height="80.0" width="100.0" x="300.0" y="120.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-F1BBCD6F-3153-4139-9101-D3C8C2F6151C" id="BPMNShape_sid-F1BBCD6F-3153-4139-9101-D3C8C2F6151C">
<omgdc:Bounds height="80.0" width="100.0" x="630.0" y="125.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-15CEF7DC-E073-484D-9B36-4EB3DA9A059F" id="BPMNShape_sid-15CEF7DC-E073-484D-9B36-4EB3DA9A059F">
<omgdc:Bounds height="28.0" width="28.0" x="1095.0" y="151.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-69D6B9D5-A369-4708-B74B-2DECD1D0F308" id="BPMNEdge_sid-69D6B9D5-A369-4708-B74B-2DECD1D0F308">
<omgdi:waypoint x="729.9499999999999" y="165.0"></omgdi:waypoint>
<omgdi:waypoint x="1095.0" y="165.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-B452CC02-56EA-46D2-8485-FB5B788200C1" id="BPMNEdge_sid-B452CC02-56EA-46D2-8485-FB5B788200C1">
<omgdi:waypoint x="399.9499999999835" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="515.0" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="515.0" y="165.0"></omgdi:waypoint>
<omgdi:waypoint x="629.9999999999847" y="165.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-78DB6DB5-22CF-406D-9B4A-B4F14A7E062B" id="BPMNEdge_sid-78DB6DB5-22CF-406D-9B4A-B4F14A7E062B">
<omgdi:waypoint x="119.94999834279307" y="165.0"></omgdi:waypoint>
<omgdi:waypoint x="210.0" y="165.0"></omgdi:waypoint>
<omgdi:waypoint x="210.0" y="160.0"></omgdi:waypoint>
<omgdi:waypoint x="299.9999999999682" y="160.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

上面是整个流程定义,内容比较繁多,下面我们主要看一下多实例任务1的节点内容片段进行详解:


<userTask id="sid-AFB0AD6E-5B65-457F-8E99-F3B8104CBA95" name="多实例任务1" flowable:assignee="${assignee}" flowable:formFieldValidation="true">
<extensionElements>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
<multiInstanceLoopCharacteristics isSequential="false" flowable:collection="assigneeList" flowable:elementVariable="assignee">
<loopCardinality>5</loopCardinality>
<completionCondition>${nrOfCompletedInstances/nrOfInstances &gt;= 0.50}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>

上面我们已经知道了,会签的应用场景,有点想投票一样的感觉,既然是多个人参与的场景,也就意味着这是一个多人的任务,所以就有了上面的多实例任务,什么叫多实例任务呢?就是这个任务会产生多个实例,想java 的类和实例的关系一样,你需要多少个实例你new多少次这个类就行了。所以这个多实例任务是可以通过配置参数,来决定执行这个任务的时候会产生多少个一样的任务的实例,来给每个指定人的人执行,然后汇总结果,来判断是否通过。也就是说还会有个条件来判断是否通过。

至于是多少个实例呢?这个是通过

<loopCardinality>5</loopCardinality>

配置的吗,这里我们配置的是5个实例,也就是说要把它分给五个人执行。

  • flowable:assignee="${assignee}"
  • flowable:collection=“assigneeList”
  • flowable:elementVariable=“assignee”
  • isSequential=“false”

理解了上面我们再看一下上面的属性

  • isSequential=“false”

false 代表并行,true代表串行,是什么意思呢?并行就是上面这5个任务可以同时执行,不受约束,串行就是一个个轮着来执行。

  • flowable:assignee="${assignee}"
    该属性代表任务分配给谁,这里用的EL表达式,因为我们可能将五个不同的任务分配给五个不同的人,而且可能是我们运行时决定的(就是提前不能确定)。

  • flowable:collection=“assigneeList”
    这里是一个运行时的变量的名字,举个例子我们运行时变量里面必须有个变量名字叫assigneeList

  • flowable:elementVariable=“assignee”
    这里的assignee对应于上面的assigneeList, 如果 assigneeList是一个集合类型,那么assignee就对应于集合中的一个单元,然后,上面的EL表达式${assignee} 对应的就是这些单元。类似于Mybatis中的foreach标签。

   <foreach collection="list" item="emp" separator=";">
INSERT INTO t_employee(username, gender, email) VALUES
(#{emp.username}, #{emp.gender}, #{emp.email})
</foreach>

assigneeList对应于上面的list, assignee对应于上面的emp。

 <loopCardinality>5</loopCardinality>
<completionCondition>${nrOfCompletedInstances/nrOfInstances &gt;= 0.50}</completionCondition>
  • loopCardinality
    该属性的意思是这个任务循环的基数是多少,这个任务类型就是多实例任务,根据上面的解释,这个属性就是设置究竟是多少个实例的地方,比如我们需要五个人审批投票,然后就在这里设置个5就行了,为什么叫循环基数呢?就是因为如果我们的通过条件是3个人通过就ok的话,那么可能只需要3个实例就结束,进入到下一个环节了,而不是要5个实例。
  • completionCondition
    完成的条件,这里就是设置这个多实例任务完成的地方,这里面你可以设置自己的结束条件,比如这里的条件:
    <completionCondition>${nrOfCompletedInstances/nrOfInstances &gt;= 0.50}</completionCondition>
    这里仍然用的是EL表达式,这里面有两个变量:nrOfCompletedInstances和nrOfInstances, 这里的nr是number的简写,所以你可以看明白这个条件是什么了,完成的任务实例超过实例的50%就算完成这个节点了。当然你也可以设置别的条件,可以通过EL表达式进行设置。
    这里的变量nrOfCompletedInstances和nrOfInstances是系统自动生成的,要是你需要设置自己的变量吗,可以自己控制。

多实例任务的数据库状态

当我们启动一个上面的流程定义实例的时候传入的数据结构参数如下:


{
"deployId":"multiinstance:1:f9d0c4e2-2873-11ea-9aeb-1c872c5f4209",
"processKey":"multiinstance",
"processStarter":"sunlutong",
"varibales":{
"assigneeList":[
"m1",
"m2",
"m3",
"m4",
"m5"
]
}
}

实例化后,返回的流程实例ID是:22b6508d-2b76-11ea-af60-1c872c5f4209
进入到多实例任务节点之后,根据实例ID22b6508d-2b76-11ea-af60-1c872c5f4209。我们看一下实时的该实例的任务在表ACT_RU_TASK的数据表现:

我们可以看到上面自动生成了五个任务实例,assignee正是我们上面传入的参数assigneeList中的数据。

再来看一下多实例任务相关的实时的属性表,ACT_RU_VARIABLE表中的数据状态如下:

我们可以看到除了自己传入的参数assignee,assigneeList,会自动生成一些任务属性。

实际操作对应的数据表得变化

我们上面设置的完成属性是完成的实例超过50%就算完成了实例,也就是说我们只要完成三个实例就会结束多任务节点进入到 任务2。

提交一个任务实例

ACT_RU_TASK表得数据:

我们可以看到此时上面的assignee的任务消失了。

ACT_RU_VARIABLE表得数据:


我们可以看到数据nrOfCompletedInstances变成了1,

在连续提交两个任务实例:

发现表ACT_RU_TASK和表ACT_RU_VARIABLE的多任务实例相关的数据都没了。

流程的进展如下:

以上就是会签。

Flowable—多实例任务:会签的更多相关文章

  1. Activiti学习之 多实例实现会签功

    转: Activiti学习之 多实例实现会签功能 2014年11月26日 11:27:11 程诺 阅读数:26185   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  2. 基于springboot的flowable工作流实例实现

    基于springboot的flowable工作流实例实现 flowableUI 创建实例教程 https://www.cnblogs.com/nanstar/p/11959389.html Flowa ...

  3. flowable的多人会签和一票否决

    项目结构: 接下来代码: Duorenhuiqian.bpmn20.xml: <?xml version="1.0" encoding="UTF-8"?& ...

  4. flowable 实现多实例-会签-动态配置人员 参考demo

    会签 即多人执行当前任务 设置判断数 通过 例如:设置了是半数通过即可通过当前节点 如果当前是4人那就是2人即通过 如果是6人那就是三人即通过 如果是5人 即三人通过 看各位的判断值是如何书写 这个值 ...

  5. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  6. jBPM4.3+ssh+会签 整合配置及完整实例

    大佬们的项目里有用到会签,所以趁双休日研究了下. 其实也是简单的会签情况,不过开始的时候研究了4.4,(因为先前研究的都是4.4),发现4.4跟4.3的处理方法完全不一样,搞的我比较郁闷……弄了一天, ...

  7. flowable ui 界面请假流程操作实例

    如题,网上的教程多是代码居多,UI界面操作实例那更是一页难求,楼主分享下几天来的入坑经历,希望有需要了解,但是不知道去哪里了解的小伙伴,看完我的文章后能有所启发,文章有不足之处还请指正,若有相关问题请 ...

  8. flowable 任务多实例

    项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base*业务场景:收集每个员工的绩效考核信息:收集一次组织活动的信息:一个合同需要三个经理审批, ...

  9. activiti会签 多实例例子

    在实际的业务中,可能存在存在这么一种情况,当流程运行到某一个环节时,可能需要同时多个人的参与,才可以完成此环节.此时就可以用到activiti的多实例来解决此问题. 一.将一个节点设置成多实例的方法: ...

随机推荐

  1. uni-app p-table下时间转换的问题

    问题描述: 从后台获取时间戳,转成日期格式,出现NaN的问题 uni的p-table插件 解决思路

  2. 安装seafile记录文档

    安装yum-cron.iptables .关闭selinux yum -y install cronie yum -y install yum-cron systemctl start yu,-cro ...

  3. Bootstrap Blazor 组件介绍 Table (三)列数据格式功能介绍

    Bootstrap Blazor 是一套企业级 UI 组件库,适配移动端支持各种主流浏览器,已经在多个交付项目中使用.通过本套组件可以大大缩短开发周期,节约开发成本.目前已经开发.封装了 70 多个组 ...

  4. 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Create创建操作

    ☞ ░ 前往老猿Python博文目录 ░ 一.Nchf_OfflineOnlyCharging_Create消息交互流程 Nchf_OfflineOnlyCharging_Create服务化操作请求是 ...

  5. 第14.16节 爬虫实战2:赠人玫瑰,手留余香! request+BeautifulSoup实现csdn博文自动点赞

    写在前面:本文仅供参考学习,请勿用作它途,禁止转载! 在<第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析>老猿分析了csdn博文点赞处理的http请求和响应报 ...

  6. PyQt(Python+Qt)学习随笔:Qt Designer中的menu菜单及menu bar菜单栏

    菜单由menu bar菜单栏和menu菜单两部分构成,分别对应类QMenuBar和QMenu. menuBar是包含一系列下拉菜单项组成,menu包含两种,一种是直接对应Action的,一种是父菜单, ...

  7. VirtualBox安装Centos出现E_FAIL (0x80004005)的解决方法

    问题描述:UUID已经存在 Cannot register the hard disk 'F:\hadoop\VirtualBox-centos\centos6.4\centos6.4.vdi' {0 ...

  8. webpack项目如何正确打包引入的自定义字体

    webpack项目如何正确打包引入的自定义字体 一. 如何在Vue或React项目中使用自定义字体 在开发前端项目时,经常会遇到UI同事希望在项目中使用一个炫酷字体的需求.那么怎么在项目中使用自定义字 ...

  9. 第 4 篇 Scrum 冲刺博客

    每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 实现收藏夹功能 实现重设计的个人界面功能 无 ...

  10. 团队作业 需求改进&系统设计

    PaChat聊天系统 一.需求&原型改进: 1.针对课堂讨论环节老师和其他组的问题及建议,对修改选题及需求进行修改 问题1:功能划分条理不够清晰. 修改1:改为流程图的形式. 问题2:功能不能 ...