多实例任务 会签

什么是会签?

举个例子:比如我们有一个任务 可能需要多人审批,审批通过的条件可能比较多样,比如五个人审批。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的多任务实例相关的数据都没了。

流程的进展如下:

以上就是会签。

关于数字证书,数字签名,CA证书,Https的关系图文讲解都在这里了

日志配置文件详解,小白级

Flowable—多实例任务:会签相关推荐

  1. Flowable工作流之多实例任务会签

    目录 1. 会签 2. 多实例任务会签 2.1. 绘制流程图 2.1.1. 多实例类型 2.1.2. 集合(多实例) 2.1.3. 元素变量(多实例) 2.1.4. 分配用户 2.1.5. 完成条件( ...

  2. Flowable多实例加签减签功能正式上线

    文章的最下面有学习视频与源代码 拒绝重复造轮子了,有这个流程平台就够了 概念 什么是加签 在一个多实例会签流程中,会签节点审批人有A.B两个人.当A领导登录的时候,看到当前节点只有两个人,责任承担比较 ...

  3. Flowable多实例会签功能来袭

    文章的最下面有学习视频与源代码 拒绝重复造轮子了,有这个流程平台就够了 会签.或签 会签 ABC三人都审批通过才能进入下一节点 (三人都可以看到任务) 或签 其中一人通过 即可进入下一节点 (三人都可 ...

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

    首先直接上案例! 项目结构: 接下来代码: Duorenhuiqian.bpmn20.xml: <?xml version="1.0" encoding="UTF- ...

  5. flowable 多实例动态添加人

    1.背景: 由于在日常情况下,我们的多实例要动态添加人员的场景,有没有这样的api呢?新的flowable有这样的功能. 2.具体实现 xml <userTask id="miTask ...

  6. flowable实战(四)flowable任务实例管理接口

    文章目录 1. 任务办理模式分两种 1.1. 一种直接办理模式 1.2. 一种需要签收后再办理 2. 转办任务 3. 委派任务与代办任务 4. 待办任务列表 5. 待办签收列表 6. 抄送任务 7. ...

  7. 12.flowable 流程实例 终止流程

    项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base 视频讲解地址 https://space.bilibili.com/485524575/ ...

  8. flowable 多实例流程

    <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http:// ...

  9. flowable流程实例管理接口

    一.流程实例的管理接口常见功能: 1.启动一个流程(即创建一个流程实例) 2.本人发起的流程实例 3.本人参与的流程实例 4.挂起/激活流程实例 5.提前终止流程实例(或又叫撤销流程) 6.彻底删除流 ...

最新文章

  1. 阿里巴巴宣布成立人工智能治理与可持续发展实验室
  2. WLAN与WIFI的区别
  3. 用StringBuilder 或StringBuffer: 把字符串“ABCDE”,转变成字符串“A,B,C,D” (注意,最后一个E是需要删除的)
  4. 程序员进阶架构师路线
  5. Python Pytest调用fixture之@pytest.mark.usefixtures()、叠加usefixtures、@pytest.fixture(autouse=True)用法详解
  6. liunx的urandom生成随机字符
  7. 程序员面试金典——7.5平分的直线
  8. codeforce 837C
  9. 【第八周】回到起点,从头再来
  10. 是运用计算机科学的基础知识进行问题求解,计算机基础-第一章计算机基础知识.ppt...
  11. css里的小图标怎么加入,前端页面如何引入小图标?CSS字体的另类使用方式!
  12. idea keymap之前选择成 Eclipse 后,idea默认的快捷键Default找不到了的解决办法
  13. 4 个免费好用的 WordPress 图库插件
  14. 在.NET中操作XmlDocument,XmlReader的方法
  15. 计算机专业用什么轴的键盘,平常爱打游戏,机械键盘应该买什么轴?
  16. ubuntu18 百度云盘
  17. 大三成长日记——第二弹(批处理bat篇)
  18. unity3D 移动平台性能优化
  19. Java语言基础小结
  20. 基于python的智能股票大数据预测可视化系统

热门文章

  1. JMeter(十三):借用Jmeter连接数据库 ,获取短信验证码
  2. C语言-MSB/LSB大小端序
  3. chrome performance性能检测面板
  4. 图形 / 短信 :验证码
  5. mysql dml语句 先读取在更新_事务的4个特性——ACID(原子性、一致性、隔离性和持久性)、更新丢失问题...
  6. 直线裁剪算法-Cohen-Sutherland算法
  7. 基于SDN的DDoS攻击检测与防御
  8. uniapp/微信获取用户定位
  9. 动态规划求解最大子段和
  10. ODOO 产品变体太强大了