Activiti排他网关之学习浅谈一

Activiti 异常:No outgoing sequence flow of the exclusive gateway ‘Gateway_12b2b29‘ 异常信息: org.activiti.engine.ActivitiException: No outgoing sequence flow of the exclusive gateway 'Gateway_12b2b29' could be selected for continuing the process at org.activiti.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior.leave(ExclusiveGatew 阅读详情

情景:
某一家公司最近在给一个单位做一个财务审批的OA。具体需求是这样的:当部门申请的金额小于一万块的时候,财务部可以直接决策。当部分申请的金额大于一万块并且小于三十万的时候,财务部经理决策,当金额超出了或者等于三十万的时候,需要财务主管来决策。那么我们的工作流应该如何设计呢?
也许有人会说,这不简单,小于一万直接发送到财务部,大于一万小于三十,直接给财务经理。其他就发给财务主管。
你是否注意到,其实这样字可以存在审批漏洞。打个比方,我跟部门一个哥们非常好,我又想申请大于一万的经费。我是不是可以直接越过领导发送给我哥们,让他给我放款。再或者,来了一个新人,新人并不知道这个申请的规则,申请几块钱,也发给了财务主管,财务主管非常生气的说:我很忙的,没空给你处理这些蒜皮小事。
分析:
工作流的作用无非就是自动化,规范化。形成一整套的流程。制定好一些列规则后,能够严格遵守这些规则来处理任务。很多一些国产的工作流很灵活,但是审核机制或者工作机制很不严谨。我是不怎么理解这些工作流中国化的。当然,客户是上帝,客户说了算。我们这里以BPMN2.0的标准。就可以使用排他网关来实现我们的需求。
关于排他网关:
1. 排他网关exclusive gateway 经常使用流程变量决定流程下一步要选择的路径
2. 排他网关(也叫异或网关 XOR gateway,或者更专业的,基于数据的排他网关 exclusive data¬based gateway),用于为流程中的决策建模。
3. 当执行到达这个网关时,所有出口顺序流会按照它们定义的顺序进行计算。条件计算为true的顺序流(当没有设置条件时,认为顺序流定义为true)会被选择用于继续流程。
4. 用排他网关时,只会选择一条顺序流。当多条顺序 流的条件都计算为true时,其中在XML中定义的第一条(也只有这条)会被选择,用于继续流程。如果没有可选的顺序流,会抛出异常。
5. 排他网关,用内部带有’X’图标的标准网关(菱形)表示,'X’图标代表异或(XOR)的含义。请注意内部没有图标的网关默认为排他网关。BPMN 2.0规范不允许在同一个流程中,混合使用带有及没有X的菱形标志
6. 一个排他网关对应一个以上的顺序流


图1 排他网关

说明:网关是一个菱形◇,排他网关就是菱形里面加个'X’,'X’图标代表异或(XOR)的含义



图2 默认顺序流

说明:默认顺序流,用起点带有“斜线”标记的一般顺序流表示。
活动的默认顺序流,由该活动的default属性定义。
当其他连线计算都为false的时候,才会走默认顺序流。

排他网关的实现:

关于资金申请审批流程。
步骤一:设计流程图 
我们这里设置一个发起部门,就是资金发起申请部门
流程申请的流程:
1. 小于或者等于一万的,直接走财务审批即可
2. 大于一万小于三十万的,需要财务经理审批。
3. 大于或者等于三十万的,需要爱财务主管审批。



图3 排他网关设计

步骤二:并设置表达式

Activiti里面设置表达式可以用EL(Expression Language)表达式。。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。EL不在本章节的讨论范围内,需要了解的可以自行找资料。
1、语法结构
${expression}
2、[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:
user.My−Name应当改为user.My−Name应当改为{user["My-Name"]}
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量

表达式一:${money>1&&money<30}


 


图4 设置表达式

表达式二:${money>=30}


 


图6 设置表达式

无表达式:默认
默认是指其他其他条件都不满足的条件下,走默认路线。



 

图7 设置表达式

流程图代码:

复制代码

 1 <?xml version='1.0' encoding='UTF-8'?>
 2 <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/processdef">
 3 <process id="process" isExecutable="true">
 4 <startEvent id="sid-7FF420A9-E0A3-435A-8C64-17F4948E169F" />
 5 <userTask id="sid-77BDF7D7-590C-421B-AE15-8BA17A6C37BB" name="部门" activiti:assignee="admin" />
 6 <exclusiveGateway id="sid-8E4A81E5-2B71-4397-A8F1-242C7B0F4DC9" default="sid-21324A76-AD4C-4B76-989A-4870D2AACA3C" />
 7 <userTask id="sid-E53B2318-C85B-442F-9DA7-56E96341FB79" name="财务经理" activiti:assignee="admin" />
 8 <userTask id="sid-E974CD46-11DC-4860-B277-E452C97D4487" name="财务主管" activiti:assignee="admin" />
 9 <endEvent id="sid-6E6E0074-2729-4217-B273-938DE98CF5BE" />
10 <sequenceFlow id="sid-48D646A3-2C45-4F83-9BAF-0ABECFE842D0" sourceRef="sid-E53B2318-C85B-442F-9DA7-56E96341FB79" targetRef="sid-6E6E0074-2729-4217-B273-938DE98CF5BE" />
11 <sequenceFlow id="sid-B8EA0191-9F35-4D09-BEA6-EF41420A86ED" sourceRef="sid-7FF420A9-E0A3-435A-8C64-17F4948E169F" targetRef="sid-77BDF7D7-590C-421B-AE15-8BA17A6C37BB" />
12 <sequenceFlow id="sid-4298366E-F857-4818-8570-DDF1DA7F41AF" sourceRef="sid-77BDF7D7-590C-421B-AE15-8BA17A6C37BB" targetRef="sid-8E4A81E5-2B71-4397-A8F1-242C7B0F4DC9" />
13 <userTask id="sid-8DE1277A-5CAA-4576-A7CD-55E6272B0A6C" name="财务" activiti:assignee="admin" />
14 <sequenceFlow id="sid-4C05BAAF-2FBC-4220-B832-52FFEED2A855" sourceRef="sid-8DE1277A-5CAA-4576-A7CD-55E6272B0A6C" targetRef="sid-6E6E0074-2729-4217-B273-938DE98CF5BE" />
15 <sequenceFlow id="sid-21324A76-AD4C-4B76-989A-4870D2AACA3C" name="默认" sourceRef="sid-8E4A81E5-2B71-4397-A8F1-242C7B0F4DC9" targetRef="sid-8DE1277A-5CAA-4576-A7CD-55E6272B0A6C" />
16 <sequenceFlow id="sid-8D92C614-D1B7-4AF9-9489-F7AAA9732868" sourceRef="sid-E974CD46-11DC-4860-B277-E452C97D4487" targetRef="sid-6E6E0074-2729-4217-B273-938DE98CF5BE" />
17 <sequenceFlow id="sid-838AEA2C-C494-4830-B78F-20EBA96ECB43" name="金额&lt;30万且大于1万" sourceRef="sid-8E4A81E5-2B71-4397-A8F1-242C7B0F4DC9" targetRef="sid-E53B2318-C85B-442F-9DA7-56E96341FB79">
18 <conditionExpression xsi:type="tFormalExpression"><![CDATA[${money>1&&money<30}]]></conditionExpression>
19 </sequenceFlow>
20 <sequenceFlow id="sid-D916A9B9-DC9A-4FC1-BB6B-377520F5F7FC" name="金额>=30万" sourceRef="sid-8E4A81E5-2B71-4397-A8F1-242C7B0F4DC9" targetRef="sid-E974CD46-11DC-4860-B277-E452C97D4487">
21 <conditionExpression xsi:type="tFormalExpression"><![CDATA[${money>=30}]]></conditionExpression>
22 </sequenceFlow>
23 </process>
24 <bpmndi:BPMNDiagram id="BPMNDiagram_process">
25 <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process">
26 <bpmndi:BPMNShape bpmnElement="sid-7FF420A9-E0A3-435A-8C64-17F4948E169F" id="BPMNShape_sid-7FF420A9-E0A3-435A-8C64-17F4948E169F">
27 <omgdc:Bounds height="30.0" width="30.0" x="105.0" y="155.0" />
28 </bpmndi:BPMNShape>
29 <bpmndi:BPMNShape bpmnElement="sid-77BDF7D7-590C-421B-AE15-8BA17A6C37BB" id="BPMNShape_sid-77BDF7D7-590C-421B-AE15-8BA17A6C37BB">
30 <omgdc:Bounds height="80.0" width="100.0" x="202.0" y="130.0" />
31 </bpmndi:BPMNShape>
32 <bpmndi:BPMNShape bpmnElement="sid-8E4A81E5-2B71-4397-A8F1-242C7B0F4DC9" id="BPMNShape_sid-8E4A81E5-2B71-4397-A8F1-242C7B0F4DC9">
33 <omgdc:Bounds height="40.0" width="40.0" x="360.0" y="150.0" />
34 </bpmndi:BPMNShape>
35 <bpmndi:BPMNShape bpmnElement="sid-E53B2318-C85B-442F-9DA7-56E96341FB79" id="BPMNShape_sid-E53B2318-C85B-442F-9DA7-56E96341FB79">
36 <omgdc:Bounds height="80.0" width="100.0" x="525.0" y="0.0" />
37 </bpmndi:BPMNShape>
38 <bpmndi:BPMNShape bpmnElement="sid-E974CD46-11DC-4860-B277-E452C97D4487" id="BPMNShape_sid-E974CD46-11DC-4860-B277-E452C97D4487">
39 <omgdc:Bounds height="80.0" width="100.0" x="540.0" y="130.0" />
40 </bpmndi:BPMNShape>
41 <bpmndi:BPMNShape bpmnElement="sid-6E6E0074-2729-4217-B273-938DE98CF5BE" id="BPMNShape_sid-6E6E0074-2729-4217-B273-938DE98CF5BE">
42 <omgdc:Bounds height="28.0" width="28.0" x="735.0" y="156.0" />
43 </bpmndi:BPMNShape>
44 <bpmndi:BPMNShape bpmnElement="sid-8DE1277A-5CAA-4576-A7CD-55E6272B0A6C" id="BPMNShape_sid-8DE1277A-5CAA-4576-A7CD-55E6272B0A6C">
45 <omgdc:Bounds height="80.0" width="100.0" x="529.0" y="254.0" />
46 </bpmndi:BPMNShape>
47 <bpmndi:BPMNEdge bpmnElement="sid-4298366E-F857-4818-8570-DDF1DA7F41AF" id="BPMNEdge_sid-4298366E-F857-4818-8570-DDF1DA7F41AF">
48 <omgdi:waypoint x="302.0" y="170.0" />
49 <omgdi:waypoint x="360.0" y="170.0" />
50 </bpmndi:BPMNEdge>
51 <bpmndi:BPMNEdge bpmnElement="sid-D916A9B9-DC9A-4FC1-BB6B-377520F5F7FC" id="BPMNEdge_sid-D916A9B9-DC9A-4FC1-BB6B-377520F5F7FC">
52 <omgdi:waypoint x="399.54545454545456" y="170.45454545454547" />
53 <omgdi:waypoint x="540.0" y="170.11933174224345" />
54 </bpmndi:BPMNEdge>
55 <bpmndi:BPMNEdge bpmnElement="sid-21324A76-AD4C-4B76-989A-4870D2AACA3C" id="BPMNEdge_sid-21324A76-AD4C-4B76-989A-4870D2AACA3C">
56 <omgdi:waypoint x="392.2127329192547" y="177.78726708074535" />
57 <omgdi:waypoint x="529.0" y="262.89168765743074" />
58 </bpmndi:BPMNEdge>
59 <bpmndi:BPMNEdge bpmnElement="sid-8D92C614-D1B7-4AF9-9489-F7AAA9732868" id="BPMNEdge_sid-8D92C614-D1B7-4AF9-9489-F7AAA9732868">
60 <omgdi:waypoint x="640.0" y="170.0" />
61 <omgdi:waypoint x="735.0" y="170.0" />
62 </bpmndi:BPMNEdge>
63 <bpmndi:BPMNEdge bpmnElement="sid-838AEA2C-C494-4830-B78F-20EBA96ECB43" id="BPMNEdge_sid-838AEA2C-C494-4830-B78F-20EBA96ECB43">
64 <omgdi:waypoint x="392.46923076923076" y="162.46923076923076" />
65 <omgdi:waypoint x="525.0" y="73.54755784061696" />
66 </bpmndi:BPMNEdge>
67 <bpmndi:BPMNEdge bpmnElement="sid-4C05BAAF-2FBC-4220-B832-52FFEED2A855" id="BPMNEdge_sid-4C05BAAF-2FBC-4220-B832-52FFEED2A855">
68 <omgdi:waypoint x="629.0" y="257.52941176470586" />
69 <omgdi:waypoint x="737.6892144673815" y="178.25022003555705" />
70 </bpmndi:BPMNEdge>
71 <bpmndi:BPMNEdge bpmnElement="sid-48D646A3-2C45-4F83-9BAF-0ABECFE842D0" id="BPMNEdge_sid-48D646A3-2C45-4F83-9BAF-0ABECFE842D0">
72 <omgdi:waypoint x="625.0" y="77.35632183908046" />
73 <omgdi:waypoint x="737.7845494056976" y="161.6206403605787" />
74 </bpmndi:BPMNEdge>
75 <bpmndi:BPMNEdge bpmnElement="sid-B8EA0191-9F35-4D09-BEA6-EF41420A86ED" id="BPMNEdge_sid-B8EA0191-9F35-4D09-BEA6-EF41420A86ED">
76 <omgdi:waypoint x="135.0" y="170.0" />
77 <omgdi:waypoint x="202.0" y="170.0" />
78 </bpmndi:BPMNEdge>
79 </bpmndi:BPMNPlane>
80 </bpmndi:BPMNDiagram>
81 </definitions>

复制代码

 

步骤三:测试

1).如果是大于1万小于30万
完成任务代码

复制代码

 1 /**完成我的任务*/
 2 @Test
 3 public void completeMyPersonalTask(){
 4 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 5 String taskId="377542";
 6 Map<String,Object> variables=new HashMap<String,Object>();
 7 variables.put("money", 20);
 8 processEngine.getTaskService()//与正在执行的案例管理相关的Service
 9 .complete(taskId,variables);
10 
11 System.out.println("完成任务,任务ID:"+taskId);
12 }

复制代码

 


 


图8 测试流程跟踪

2).如果是大于或者等于30万

复制代码

 1 /**完成我的任务*/
 2 @Test
 3 public void completeMyPersonalTask(){
 4 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 5 String taskId="385053";
 6 Map<String,Object> variables=new HashMap<String,Object>();
 7 variables.put("money", 40);
 8 processEngine.getTaskService()//与正在执行的案例管理相关的Service
 9 .complete(taskId,variables);
10 
11 System.out.println("完成任务,任务ID:"+taskId);
12 }

复制代码

 

 


图9 测试流程跟踪

3).如果是小于1万(没有满足条件的,走默认路径:财务):

复制代码

 1 /**完成我的任务*/
 2 @Test
 3 public void completeMyPersonalTask(){
 4 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 5 String taskId="385048";
 6 Map<String,Object> variables=new HashMap<String,Object>();
 7 variables.put("money", 0.2);
 8 processEngine.getTaskService()//与正在执行的案例管理相关的Service
 9 .complete(taskId,variables);
10 
11 System.out.println("完成任务,任务ID:"+taskId);
12 }

复制代码

 


 

图10 测试流程跟踪

4).如果没有设置金额

复制代码

 1 /**完成我的任务*/
 2 @Test
 3 public void completeMyPersonalTask(){
 4 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 5 String taskId="385048";
 6 //Map<String,Object> variables=new HashMap<String,Object>();
 7 //variables.put("money", 0.2);
 8 processEngine.getTaskService()//与正在执行的案例管理相关的Service
 9 .complete(taskId);
10 
11 System.out.println("完成任务,任务ID:"+taskId);

复制代码

 

会抛一个异常:Unknown property used in expression: ${money>1&&money<30}

org.activiti.engine.ActivitiException: Unknown property used in expression: ${money>1&&money<30}

5).如果没有默认顺序流,又没有满足的条件(2000)

 



图11 测试流程图设计

 

复制代码

 1 /**完成我的任务*/
 2 @Test
 3 public void completeMyPersonalTask(){
 4 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 5 String taskId="385022";
 6 Map<String,Object> variables=new HashMap<String,Object>();
 7 variables.put("money", 0.2);
 8 processEngine.getTaskService()//与正在执行的案例管理相关的Service
 9 .complete(taskId,variables);
10 
11 System.out.println("完成任务,任务ID:"+taskId);
12 }

复制代码

 

会抛异常:No outgoing sequence flow of the exclusive gateway

org.activiti.engine.ActivitiException: No outgoing sequence flow of the exclusive gateway 'sid-8E4A81E5-2B71-4397-A8F1-242C7B0F4DC9' could be selected for continuing the process

扩展:

假如我部门是确定了,但是我的金额可能是随时变动的,那么有两种方案第一种,全部动态表达式:
财务经理:
${money>num2&&money<num3}
财务主管:
${money>=num1}
财务:
${money<num4}

复制代码

 1 /**完成我的任务*/
 2 @Test
 3 public void completeMyPersonalTask(){
 4 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 5 String taskId="385063";
 6 Map<String,Object> variables=new HashMap<String,Object>();
 7 variables.put("money", 40);
 8 variables.put("num1", 30);
 9 variables.put("num2", 1);
10 variables.put("num3", 30);
11 variables.put("num3", 1);
12 processEngine.getTaskService()//与正在执行的案例管理相关的Service
13 .complete(taskId,variables);
14 
15 System.out.println("完成任务,任务ID:"+taskId);
16 }

复制代码

 


 


图12 测试流程跟踪

第二种,后台判断
设置表达式:
财务经理:
${flow==”1” }
财务主管:
${flow==”2” }
财务:
${flow==”3” }

复制代码

 1 @Test
 2 public void completeMyPersonalTask(){
 3 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 4 String taskId="385072";
 5 Map<String,Object> variables=new HashMap<String,Object>();
 6 int money=40;
 7 if(money>=30){
 8 variables.put("flow", "1");
 9 }else if(money>1&&money<30){
10 variables.put("flow", "2");
11 }else{
12 variables.put("flow", "3");
13 }
14 processEngine.getTaskService()//与正在执行的案例管理相关的Service
15 .complete(taskId,variables);
16 
17 System.out.println("完成任务,任务ID:"+taskId);
18 }

复制代码

 



图13 测试流程跟踪

 

Activiti入门到精通(项目实战)视频课程

详细地址:https://edu.youkuaiyun.com/course/detail/10139

FlowableException: No outgoing sequence flow of the exclusive gateway ‘XXXXXXX‘ kafka consume exception! 使用Kafka调用flowable流程报错了:No outgoing sequence flow of the exclusive gateway. org.flowable.common.engine.api.FlowableException: No outgoing sequence flow of the exclusive gateway 'exclusivegateway6' could be selected for continuing 阅读详情

相关推荐

Activiti进阶(七)——排他网关(ExclusiveGateWay)

上一篇博文我们简单介绍了一下连线,也分析了一种情况,就是在工作流中,用户任务下面有两个连线,如何选择工作流的进程。这一篇博文和上一篇博文讨论的主题类似,解决上一篇博文中有多个连线分支的情况,我们可以使用排他网管来解决。      一、流程图

周江霄 5万+

Activiti 工作流执行常见问题汇总(含解决方案或思路)

Activiti7常见错误汇总;taskId is null ;Unknown property used in expression;No outgoing sequence flow

勿在浮沙柱筑高台 7205

activiti根据当前节点获取下一个UseTask节点

以前写过一篇文章activiti根据当前节点获取下一个节点信息,当时的需求只是需要获取下一个节点而已,并没有要求获得什么类型的节点,所以下一个节点可能是任何节点,在最近的项目中的需求是根据当前的节点获取下一个UseTask节点,为当前审批人选择下一个审批人提示,所以前面的文章所给出的信心就不能够实现当前功能。 所以本文所述为获取下一个任务节点。根据上一篇文章,可以获取到下一个节点的信息,如果我们获

chenfengdejuanlian的专栏 4万+

No outgoing sequence flow of the inclusive gateway ‘SendCheck‘ could be selected for continuing(☆)

这个报错的原因就是,流程图不知道该怎么走了,为啥呢?因为我们在流程箭头中设置了条件,但是我们选择的不在选择范围内,这时候流程图就蒙圈了,就不知道怎么走了,就会报这个错误。比你告诉流程图,如果选择"是",就是通过,如果选择"否"就是不通过,但是你选择了一个"非",这时候,流程图就蒙圈了,就会报出这个错误。 我的这个错误是本来应该在3的地方设置通过,在1的地方设置不通过,但是我却在2的地方设置了通过,这时候,如果在前段选择不通过,就会抛出这个异常。 ...

独狼的博客 7657

Activiti第三篇【连接、排他网关、指定任务处理人、组任务】

连线上面我们已将学过了流程变量了,可以在【任务服务、运行时服务、流程开始、完成某个任务时设置流程变量】,而我们的连接就是流程变量的实际应用了….定义流程图我们并不是所有的流程都是按一条的路径来走的,我们有的时候会根据条件来走不同的路。当然了,最终该流程是会一步步走完….例子:重要的信息交由老板来处理,不重要的信息交由经理来处理表达式的结果必须是布尔型 #{variable==’value’} ${

zhong_fucheng 4368

Activiti 学习笔记八:排他网关(ExclusiveGateWay)

Activiti 学习笔记八:排他网关(ExclusiveGateWay)

Flowable No outgoing sequence flow of the exclusive gateway ‘xxx‘ could be selected for continuing

前面在定义流程xml文件,并进行部署的过程中,遇到过“[Validation set: 'flowable-executable-process' | Problem: 'flowable-exclusive-gateway-no-outgoing-seq-flow'] : Exclusive gateway has no outgoing sequence flow ” 问题,发现是定义流程xml关于网关的部分有误导致的。 现在已经部署好有网关的流程后,正在提交网关节点前...

MTonj的博客 1万+

避开这些坑!Kaggle数据集下载常见问题及解决方案(含Header Editor插件配置)

本文针对Kaggle数据集下载过程中的常见难题,提供了系统性的解决方案。重点解决了验证码无法显示、API安装失败、密钥文件配置错误及下载命令执行问题,并详细介绍了使用Header Editor插件配置请求头以绕过验证码障碍的实战方法,帮助用户高效获取数据。

weixin_29043895的博客 300

activiti学习之排他网关

写在前面 在一些场景中可能不同的条件就流转到不同的节点来执行,比如请假,当请假天数小于等于2天,则直属领导审批,当请假天数大于2天小于等于5天时就部门负责人审批,当请假天数大于5天 就董事长审批,这种场景就可以通过排他网关来实现,经过网关,网关会判断哪条流出的线是符合条件的,进而通过该线流转。 1:测试 1.1:流程设计 效果图 以下是在网关连接的线上设置的条件,以days>2days<=5为例,具体参考xml文件: xml <?xml version="1.0" encodi

wang0907的博客 2251

QGroundControl实现多机控制

前言 作为西安电子科技大学的本科生一名,目前在研究关于无人机导航规划与轨迹控制方面。 目前在跟导师做关于雷达无人机的一个项目,在这里记录一下关于QGC地面站实现多机控制的一些方法。 某些地方写的可能不是很完善,欢迎大家补充。 目前该文章还未写完,后期本人会继续编写 多机控制原理 多机地面站支持TCP,UDP和串口等三种连接方式,首先我们需要对这两种连接方式抽象出一个基类LinkInterface,提供两个虚函数分别对应于数据接受和发送处理,针对于不同的连接方式实现TCP,UDP和串口连接相对应的子类TCPL

Phillweston的博客 8428

浅谈MOS管的发热原因和解决办法

解读一下开关管发热原因,解决方案和开关损耗测试。

qq_45508321的博客 1万+

Activiti流程判断之排他网关和并行网关

目录排他网关并行网关 排他网关 业务场景 某一家公司最近在给一个单位做一个财务审批的OA。具体需求是这样的:当部门申请的金额小于一万块的时候,财务部可以直接决策。当部分申请的金额大于一万块并且小于三十万的时候,财务部经理决策,当金额超出了或者等于三十万的时候,需要财务主管来决策。 当满足某一条件就能通过的业务,我们就能用排他网关来处理 我这个流程图就是模拟这个业务场景画的,第一个是money&l...

阳某的博客 3999

新手避坑指南:用Silvaco Atlas搞定GaN HEMT电热仿真的完整流程(附代码解读)

本文详细介绍了使用Silvaco Atlas进行GaN HEMT电热特性仿真的完整流程,特别针对新手常见问题提供避坑指南。从软件环境配置、结构定义、网格划分到物理模型设置,逐步解析关键步骤,并附有代码解读和调试技巧,帮助读者快速掌握GaN器件仿真的核心技术。

weixin_29215815的博客 596

Activiti的排他网关、并行网关、

activiti工作流中我们经常用到的网关有两种: 1. Exclusive Gateway 排他网关 排他网关.png 排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在> 流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个'true') 会被选中,让流

公子七 3271

Cesium功能集(十二):Cesium中流体仿真

【代码】Cesium功能集(十二):Cesium中流体仿真。

GIS肆月 600

什么是 SAPGUI 里的 Logon Group/Server

这意味着,不同的用户连接可以被分配到不同的应用服务器,以实现均衡的资源利用和降低某一服务器的负载压力。在这种配置下,欧洲的用户登录时选择“EUROPE_GROUP”,系统将自动选择一个位于欧洲的数据中心的服务器进行连接,这样不仅减少了网络延迟,还实现了服务器间的负载均衡。用户在 SAPGUI 中登录时,只需选择相应的 Logon Group(例如“FIN_GROUP”),系统就会自动将他们的连接请求分配到当前负载最小的应用服务器上,这种动态分配大大提升了系统的响应速度和稳定性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1069

关于activiti的排他网关的用法欢迎来评价

关于activiti的排他网关的用法欢迎来评价 排他网关 描述 排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个’true’) 会被选中,让流程继续运行。 注意这里的外出顺序流 与BPMN 2.0通常的概念是不同的。通...

Tony66xu的博客 1407

C 语言多文件编程 : 大型程序的组织与管理

本文介绍了C语言多文件编程的核心概念与实践方法。主要内容包括:1. 多文件编程的必要性:解决单文件编程在大型项目中的维护和协作问题;2. 文件组织方式:头文件(.h)负责声明接口,源文件(.c)实现具体功能;3. 编译链接过程:分阶段编译和链接多个源文件;4. 头文件设计原则:包含接口声明、使用保护机制、保持自包含性;5. 模块化实践:通过示例展示学生信息管理系统的模块划分;6. 构建工具:介绍Makefile的编写和使用方法。文章还提供了创建静态库和动态库的指导,并强调了模块化设计、信息隐藏等软件工程原则

2503_91057718的博客 1946

工作流框架--activiti(四)--排他网关和并行网关

接下来介绍activiti的排他网关和并行网关: 排他网关(ExclusiveGateway):       用来在流程中实现决策。当流程执行到排他网关,所有数据就会被执行一遍,满足条件的就会让流程继续运行。 需要注意的是:排他网关只会选择一条满足条件的执行。 咱们以下面流程为例:   也就是当金额大于1000,就会走总经理流程,当在1000和500之间,就会走部门

My Devil's Cry 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Activiti6.0(五)排他网关的使用

目录 一、前言 二、排他网关使用 1、绘制流程图 2、执行排他网关 3、复杂条件判断 一、前言 上一篇中有讲到在有多条出线时,可以在流程线上使用流程变量来控制,Activiti的排他网关本质上也是通过给网关后的每条出线设置条件,除去默认出线后然后从上至下进行判断,当条件为true或者无条件时则认为满足,直接执行该条出线,排他网关也允许设置默认出线,即当所有出线都不满足时执行该条默认出...

清茶的博客 6123

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

说一说activiti中的排他网关和并行网关

activiti工作流中我们经常用到的网关有两种: 1. Exclusive Gateway 排他网关 排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件 解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个'true') 会被选 中,让流程继续运行。 注意这里的外出...

qq_38780765的博客 1681

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java排他_Activiti之排他网关

Activiti之排他网关所谓排他网关 顾名思义 执行到该网关,根据条件只能走一条执行线路;在右侧 palette中 的Gateway 有个 ExclusiveGateway 即为默认网关;我们绘制新的流程定义图标:这里我们规定 根据请假天数,来具体让谁来审批,请假天数小于3天,班长审批;请假天数小于7天,大于等于3天,班主任审批;请假天数大于等于7天,校长审批;这里我们依然用表达式来实现;班长...

weixin_32589387的博客 521

activiti(7.0)排他网关

import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.TaskService; import org.activiti.engine.task.Task; /** * 测试排他网关的存在的意义 * 1.测试没有...

苏凯的博客 770

activiti排他网关与并行网关

activiti工作流中我们经常用到的网关有两种: 1. Exclusive Gateway 排他网关 排他网关.png 排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件 解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个'true') 会被选 中,让流程...

CAT 1085

activiti 排他网关_Activiti使用指南

目录1. Eclipse中安装Activiti流程图设计器12. 创建Activiti项目及流程图33. 画流程图43.1. 开始节点43.2. 创建“申请”任务53.3. 创建“审核”任务53.4. 创建排它网关63.5. 创建“结束”节点63.6. 创建打回分支的连接线64. 配置74.1. 添加申请字段74.1.1. 支持的字段类型:94.2. 添加审核字段104.3. 配置排它网关105....

weixin_39968655的博客 535
上一篇: 人工智能【腾讯AI】-人脸识别技术之人脸搜索接口使用说明
下一篇: 房屋出租小助手APP需求分析
优快云专家-赖老师(软件之家)
博客等级 码龄10年 5978粉丝 200原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优快云专家-赖老师(软件之家)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值