Activiti 网关
来源:互联网 发布:手机淘宝怎样撤销投诉 编辑:程序博客网 时间:2024/05/01 00:17
网关用来控制流程的流向,分为两种:排他网关(exclusiveGateWay,只允许路径上的一条路径执行)和并行网关(parallelGateWay,分叉点后面的路径可以同时执行,没有先后)。
下面我们来看一下两个例子:
排他网关
当用户提交报销申请单之后,系统根据报销金额自动流转到对应任务。
exclusiveGateWay.bpmn
<?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:activiti="http://activiti.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.activiti.org/test"> <process id="exclusiveGateWay" name="exclusiveGateWayProcess" isExecutable="true"> <startEvent id="startevent1" name="Start"></startEvent> <userTask id="usertask1" name="费用报销申请" activiti:assignee="张三"></userTask> <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow> <userTask id="usertask2" name="审批【部门经理】" activiti:assignee="李四"></userTask> <userTask id="usertask3" name="财务" activiti:assignee="王五"></userTask> <userTask id="usertask4" name="审批【总经理】" activiti:assignee="赵六"></userTask> <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway" default="默认执行财务"></exclusiveGateway> <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="exclusivegateway1"></sequenceFlow> <sequenceFlow id="flow3" name="金额小于等于1000,大于等于500" sourceRef="exclusivegateway1" targetRef="usertask2"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${money>=500 && money<=1000}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="默认执行财务" name="默认执行财务" sourceRef="exclusivegateway1" targetRef="usertask3"></sequenceFlow> <sequenceFlow id="flow5" name="金额大于1000元" sourceRef="exclusivegateway1" targetRef="usertask4"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${money>1000}]]></conditionExpression> </sequenceFlow> <endEvent id="endevent1" name="End"></endEvent> <sequenceFlow id="flow6" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow> <sequenceFlow id="flow7" sourceRef="usertask3" targetRef="endevent1"></sequenceFlow> <sequenceFlow id="flow8" sourceRef="usertask4" targetRef="endevent1"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_exclusiveGateWay"> <bpmndi:BPMNPlane bpmnElement="exclusiveGateWay" id="BPMNPlane_exclusiveGateWay"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"> <omgdc:Bounds height="35.0" width="35.0" x="340.0" y="50.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1"> <omgdc:Bounds height="55.0" width="105.0" x="305.0" y="140.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2"> <omgdc:Bounds height="55.0" width="105.0" x="80.0" y="390.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask3" id="BPMNShape_usertask3"> <omgdc:Bounds height="55.0" width="105.0" x="305.0" y="390.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask4" id="BPMNShape_usertask4"> <omgdc:Bounds height="55.0" width="105.0" x="550.0" y="380.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1"> <omgdc:Bounds height="40.0" width="40.0" x="337.0" y="260.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> <omgdc:Bounds height="35.0" width="35.0" x="340.0" y="560.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> <omgdi:waypoint x="357.0" y="85.0"></omgdi:waypoint> <omgdi:waypoint x="357.0" y="140.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"> <omgdi:waypoint x="357.0" y="195.0"></omgdi:waypoint> <omgdi:waypoint x="357.0" y="260.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3"> <omgdi:waypoint x="357.0" y="300.0"></omgdi:waypoint> <omgdi:waypoint x="132.0" y="390.0"></omgdi:waypoint> <bpmndi:BPMNLabel> <omgdc:Bounds height="42.0" width="100.0" x="-117.0" y="-35.0"></omgdc:Bounds> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="默认执行财务" id="BPMNEdge_默认执行财务"> <omgdi:waypoint x="357.0" y="300.0"></omgdi:waypoint> <omgdi:waypoint x="357.0" y="390.0"></omgdi:waypoint> <bpmndi:BPMNLabel> <omgdc:Bounds height="14.0" width="100.0" x="10.0" y="0.0"></omgdc:Bounds> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5"> <omgdi:waypoint x="357.0" y="300.0"></omgdi:waypoint> <omgdi:waypoint x="602.0" y="380.0"></omgdi:waypoint> <bpmndi:BPMNLabel> <omgdc:Bounds height="14.0" width="84.0" x="16.0" y="-15.0"></omgdc:Bounds> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6"> <omgdi:waypoint x="132.0" y="445.0"></omgdi:waypoint> <omgdi:waypoint x="357.0" y="560.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7"> <omgdi:waypoint x="357.0" y="445.0"></omgdi:waypoint> <omgdi:waypoint x="357.0" y="560.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8"> <omgdi:waypoint x="602.0" y="435.0"></omgdi:waypoint> <omgdi:waypoint x="357.0" y="560.0"></omgdi:waypoint> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></definitions>
并行网关
流程实例一旦开始,卖家就可以发货了,同时卖家可以付款,这两项活动不分前后,当卖家收款并且买家收到货物的时候,流程结束。
parallelGateWay.bpmn
<?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:activiti="http://activiti.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.activiti.org/test"> <process id="parallelGateWay" name="ParallelGateWay" isExecutable="true"> <startEvent id="startevent1" name="Start"></startEvent> <parallelGateway id="parallelgateway1" name="Parallel Gateway"></parallelGateway> <parallelGateway id="parallelgateway2" name="Parallel Gateway"></parallelGateway> <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="parallelgateway1"></sequenceFlow> <userTask id="usertask1" name="发货" activiti:assignee="张三"></userTask> <sequenceFlow id="flow2" sourceRef="parallelgateway1" targetRef="usertask1"></sequenceFlow> <userTask id="usertask2" name="付款" activiti:assignee="王五"></userTask> <sequenceFlow id="flow3" sourceRef="parallelgateway1" targetRef="usertask2"></sequenceFlow> <userTask id="usertask3" name="收货" activiti:assignee="李四"></userTask> <sequenceFlow id="flow4" sourceRef="usertask1" targetRef="usertask3"></sequenceFlow> <userTask id="usertask4" name="收款" activiti:assignee="赵六"></userTask> <sequenceFlow id="flow5" sourceRef="usertask2" targetRef="usertask4"></sequenceFlow> <sequenceFlow id="flow6" sourceRef="usertask3" targetRef="parallelgateway2"></sequenceFlow> <sequenceFlow id="flow7" sourceRef="usertask4" targetRef="parallelgateway2"></sequenceFlow> <endEvent id="endevent1" name="End"></endEvent> <sequenceFlow id="flow8" sourceRef="parallelgateway2" targetRef="endevent1"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_parallelGateWay"> <bpmndi:BPMNPlane bpmnElement="parallelGateWay" id="BPMNPlane_parallelGateWay"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"> <omgdc:Bounds height="35.0" width="35.0" x="400.0" y="20.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="parallelgateway1" id="BPMNShape_parallelgateway1"> <omgdc:Bounds height="40.0" width="40.0" x="397.0" y="110.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="parallelgateway2" id="BPMNShape_parallelgateway2"> <omgdc:Bounds height="40.0" width="40.0" x="397.0" y="370.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1"> <omgdc:Bounds height="55.0" width="105.0" x="260.0" y="170.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2"> <omgdc:Bounds height="55.0" width="105.0" x="460.0" y="170.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask3" id="BPMNShape_usertask3"> <omgdc:Bounds height="55.0" width="105.0" x="260.0" y="263.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask4" id="BPMNShape_usertask4"> <omgdc:Bounds height="55.0" width="105.0" x="460.0" y="263.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> <omgdc:Bounds height="35.0" width="35.0" x="400.0" y="470.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> <omgdi:waypoint x="417.0" y="55.0"></omgdi:waypoint> <omgdi:waypoint x="417.0" y="110.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"> <omgdi:waypoint x="417.0" y="150.0"></omgdi:waypoint> <omgdi:waypoint x="312.0" y="170.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3"> <omgdi:waypoint x="417.0" y="150.0"></omgdi:waypoint> <omgdi:waypoint x="512.0" y="170.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4"> <omgdi:waypoint x="312.0" y="225.0"></omgdi:waypoint> <omgdi:waypoint x="312.0" y="263.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5"> <omgdi:waypoint x="512.0" y="225.0"></omgdi:waypoint> <omgdi:waypoint x="512.0" y="263.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6"> <omgdi:waypoint x="312.0" y="318.0"></omgdi:waypoint> <omgdi:waypoint x="417.0" y="370.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7"> <omgdi:waypoint x="512.0" y="318.0"></omgdi:waypoint> <omgdi:waypoint x="417.0" y="370.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8"> <omgdi:waypoint x="417.0" y="410.0"></omgdi:waypoint> <omgdi:waypoint x="417.0" y="470.0"></omgdi:waypoint> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></definitions>
java代码
package com.activiti.test;import java.util.List;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.runtime.ProcessInstance;import org.activiti.engine.task.Task;import org.junit.Test;public class ParallelGateWayTest { ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /** * 部署流程定义 启动流程实例 */ @Test public void deploy() { processEngine.getRepositoryService()//获取管理流程定义实例 .createDeployment()//获取部署实例,添加要部署的流程并部署// .addClasspathResource("diagrams/exclusiveGateWay.png")//从classpath中加载,一次只能加载一个文件// .addClasspathResource("diagrams/exclusiveGateWay.bpmn") .addClasspathResource("diagrams/parallelGateWay.png")//从classpath中加载,一次只能加载一个文件 .addClasspathResource("diagrams/parallelGateWay.bpmn") .name("网上购物流程")//添加部署的名称 .deploy();//部署// ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("exclusiveGateWay"); ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("parallelGateWay"); System.out.println("流程定义的ID:" + pi.getProcessDefinitionId()); System.out.println("流程实例的ID:" + pi.getId()); } /** * 查询个人任务 */ @Test public void queryPersonalTask() { String assignee = "李四"; List<Task> list = processEngine.getTaskService() .createTaskQuery() .taskAssignee(assignee) .list(); if (list != null && list.size() > 0) { for (Task task : list) { System.out.println("任务ID:" + task.getId()); System.out.println("任务名称:" + task.getName()); System.out.println("流程定义ID:" + task.getProcessDefinitionId()); System.out.println("流程实例ID:" + task.getProcessInstanceId()); System.out.println("执行对象ID:" + task.getExecutionId()); System.out.println("==========================================="); } } } /** * 完成任务:使用流程变量设置报销的金额,由流程自动判断应该执行的哪条连线 */ @Test public void completeTask(){ String taskId = "122502"; processEngine.getTaskService() .complete(taskId); System.out.println("完成任务"); }}
0 0
- Activiti 网关
- activiti 网关
- Activiti 网关
- Activiti(五)网关
- Activiti(五)网关
- Activiti排他网关
- Activiti并行网关
- Java Activiti(9)--网关
- Activiti基础教程--09排他网关,并行网关
- Activiti基础教程--09排他网关,并行网关
- Activiti的排他网关、并行网关、
- activiti 并行网关(八)
- Activiti Designer实现排他网关
- activiti之并行网关,驳回
- activiti学习--09 排他网关
- activiti学习--10 并行网关
- 工作流框架--activiti(四)--排他网关和并行网关
- activiti实战系列 排他网关(ExclusiveGateWay)
- 足球移动动画
- android 内存泄漏
- angularJs
- Java IO操作——对象序列化(Serializable接口、ObjectOutputStream、以及与Externalizable接口的用法和区别)
- MySQL命名、设计及使用规范
- Activiti 网关
- android 属性动画
- Unity -- UI -- Scroll Rect
- 常见git用法总结
- php虚拟主机配置: 二级目录访问跳转到其他根文件夹
- Sublime Text 3 快捷键
- Ext js 6 - Class System
- Rolling in the deep
- HashMap遍历的两种方式