Activiti bpmn - 缺少与 false 的变量比较
Activiti bpmn - missing variable comparision to false
在我的 BPMN
文件中,我有一个 gateway
定义如下:
<exclusiveGateway id="gateway" name="An gateway"/>
<sequenceFlow id="sequence1" sourceRef="gateway"
targetRef="task1">
<conditionExpression xsi:type="tFormalExpression">${variableABC == true}
</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sequence2" sourceRef="gateway"
targetRef="task2">
<conditionExpression xsi:type="tFormalExpression">${variableABC == false}
</conditionExpression>
</sequenceFlow>
我想知道当缺少变量variableABC
(未在工作流引擎中设置)时会发生什么?
根据我的测试,流程似乎会转到第二个分支。谁能解释一下为什么?
在Java中null == false
会抛出异常(?)。 Activiti引擎在这种情况下是如何工作的?谢谢
我尝试部署与上述类似的工作流程,但无法部署。它给我一个错误
org.activiti.engine.ActivitiException:表达式中使用的未知 属性:${variableABC == true}
然后我把它改成了
[CDATA[${execution.getVariable('variableABC') == true}]]
[CDATA[${execution.getVariable('variableABC') == false}]]
[CDATA[${execution.getVariable('variableABC') == null}]]
在此之后我能够部署它并且运行我的测试成功。
观察:
- 当我有3个顺序流时,它从未进入"false"顺序流
- 当我删除最后一个序列流时,即用 null 检查时,我得到了错误
org.activiti.engine.ActivitiException: 无法选择独占网关'exclusivegateway1'的出序流继续处理
所以我觉得activiti是没有问题的。您只需正确验证您的工作流程。
:)
当然会去第二条路径,如果没有提供值。 默认情况下 boolean
的值始终是 false
。这是一个常见的 java 逻辑。对于 String,如果没有提供默认路径那么表达式的 null
值,Activiti 将抛出异常说 - 在 Gateway.[=13= 之后找不到 path/default ]
在我的 BPMN
文件中,我有一个 gateway
定义如下:
<exclusiveGateway id="gateway" name="An gateway"/>
<sequenceFlow id="sequence1" sourceRef="gateway"
targetRef="task1">
<conditionExpression xsi:type="tFormalExpression">${variableABC == true}
</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sequence2" sourceRef="gateway"
targetRef="task2">
<conditionExpression xsi:type="tFormalExpression">${variableABC == false}
</conditionExpression>
</sequenceFlow>
我想知道当缺少变量variableABC
(未在工作流引擎中设置)时会发生什么?
根据我的测试,流程似乎会转到第二个分支。谁能解释一下为什么?
在Java中null == false
会抛出异常(?)。 Activiti引擎在这种情况下是如何工作的?谢谢
我尝试部署与上述类似的工作流程,但无法部署。它给我一个错误
org.activiti.engine.ActivitiException:表达式中使用的未知 属性:${variableABC == true}
然后我把它改成了
[CDATA[${execution.getVariable('variableABC') == true}]]
[CDATA[${execution.getVariable('variableABC') == false}]]
[CDATA[${execution.getVariable('variableABC') == null}]]
在此之后我能够部署它并且运行我的测试成功。
观察:
- 当我有3个顺序流时,它从未进入"false"顺序流
- 当我删除最后一个序列流时,即用 null 检查时,我得到了错误 org.activiti.engine.ActivitiException: 无法选择独占网关'exclusivegateway1'的出序流继续处理
所以我觉得activiti是没有问题的。您只需正确验证您的工作流程。
:)
当然会去第二条路径,如果没有提供值。 默认情况下 boolean
的值始终是 false
。这是一个常见的 java 逻辑。对于 String,如果没有提供默认路径那么表达式的 null
值,Activiti 将抛出异常说 - 在 Gateway.[=13= 之后找不到 path/default ]